X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/887298295d00eac540e0b73429e58e77fb0ee4ab..194df46818e3f10278130de231015fb42a6b29f7:/src/msg/msg_gos.c diff --git a/src/msg/msg_gos.c b/src/msg/msg_gos.c index 7c01ce1e53..73c91df534 100644 --- a/src/msg/msg_gos.c +++ b/src/msg/msg_gos.c @@ -169,6 +169,13 @@ msg_error_t MSG_process_sleep(double nb_sec) CATCH(e) { switch (e.category) { case cancel_error: + XBT_DEBUG("According to the JAVA API, a sleep call should only deal with HostFailureException, WTF here ?"); + // adsein: MSG_TASK_CANCELED is assigned when someone kills the process that made the sleep, this is not + // correct. For instance, when the node is turned off, the error should be MSG_HOST_FAILURE, which is by the way + // and according to the JAVA document, the only exception that can be triggered by MSG_Process_sleep call. + // To avoid possible impacts in the code, I just raised a host_failure exception for the moment in the JAVA code + // and did not change anythings at the C level. + // See comment in the jmsg_process.c file, function JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_sleep(JNIEnv *env, jclass cls, jlong jmillis, jint jnanos) status = MSG_TASK_CANCELED; break; default: @@ -429,9 +436,9 @@ msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *alias, msg_global->sent_msg++; /* Send it by calling SIMIX network layer */ - smx_action_t act = simcall_comm_isend(mailbox, t_simdata->message_size, + smx_action_t act = simcall_comm_isend(SIMIX_process_self(), mailbox, t_simdata->message_size, t_simdata->rate, task, sizeof(void *), - match_fun, cleanup, match_data,detached); + match_fun, cleanup, NULL, match_data,detached); t_simdata->comm = act; /* FIXME: is the field t_simdata->comm still useful? */ msg_comm_t comm; @@ -607,7 +614,7 @@ msg_comm_t MSG_task_irecv_bounded(msg_task_t *task, const char *name, comm->task_sent = NULL; comm->task_received = task; comm->status = MSG_OK; - comm->s_comm = simcall_comm_irecv(rdv, task, NULL, NULL, NULL, rate); + comm->s_comm = simcall_comm_irecv(rdv, task, NULL, NULL, NULL, NULL, rate); return comm; } @@ -630,10 +637,9 @@ int MSG_comm_test(msg_comm_t comm) if (finished && comm->task_received != NULL) { /* I am the receiver */ - simdata_task_t simdata = (*comm->task_received)->simdata; - if (msg_global->debug_multiple_use && simdata->isused!=0) - xbt_ex_free(*(xbt_ex_t*)simdata->isused); - simdata->isused = 0; + if (msg_global->debug_multiple_use && (*comm->task_received)->simdata->isused!=0) + xbt_ex_free(*(xbt_ex_t*)(*comm->task_received)->simdata->isused); + (*comm->task_received)->simdata->isused = 0; } } CATCH(e) { @@ -707,10 +713,9 @@ int MSG_comm_testany(xbt_dynar_t comms) if (status == MSG_OK && comm->task_received != NULL) { /* I am the receiver */ - simdata_task_t simdata = (*comm->task_received)->simdata; - if (msg_global->debug_multiple_use && simdata->isused!=0) - xbt_ex_free(*(xbt_ex_t*)simdata->isused); - simdata->isused = 0; + if (msg_global->debug_multiple_use && (*comm->task_received)->simdata->isused!=0) + xbt_ex_free(*(xbt_ex_t*)(*comm->task_received)->simdata->isused); + (*comm->task_received)->simdata->isused = 0; } } @@ -743,10 +748,9 @@ msg_error_t MSG_comm_wait(msg_comm_t comm, double timeout) if (comm->task_received != NULL) { /* I am the receiver */ - simdata_task_t simdata = (*comm->task_received)->simdata; - if (msg_global->debug_multiple_use && simdata->isused!=0) - xbt_ex_free(*(xbt_ex_t*)simdata->isused); - simdata->isused = 0; + if (msg_global->debug_multiple_use && (*comm->task_received)->simdata->isused!=0) + xbt_ex_free(*(xbt_ex_t*)(*comm->task_received)->simdata->isused); + (*comm->task_received)->simdata->isused = 0; } /* FIXME: these functions are not traceable */ @@ -833,10 +837,9 @@ int MSG_comm_waitany(xbt_dynar_t comms) if (comm->task_received != NULL) { /* I am the receiver */ - simdata_task_t simdata = (*comm->task_received)->simdata; - if (msg_global->debug_multiple_use && simdata->isused!=0) - xbt_ex_free(*(xbt_ex_t*)simdata->isused); - simdata->isused = 0; + if (msg_global->debug_multiple_use && (*comm->task_received)->simdata->isused!=0) + xbt_ex_free(*(xbt_ex_t*)(*comm->task_received)->simdata->isused); + (*comm->task_received)->simdata->isused = 0; } return finished_index;