/** \ingroup msg_task_usage * \brief Sleep for the specified number of seconds * * Makes the current process sleep until \a time seconds have elapsed. * * \param nb_sec a number of second */ msg_error_t MSG_process_sleep(double nb_sec) { xbt_ex_t e; msg_error_t status = MSG_OK; /*msg_process_t proc = MSG_process_self();*/ TRACE_msg_process_sleep_in(MSG_process_self()); TRY { simcall_process_sleep(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: RETHROW; } xbt_ex_free(e); } TRACE_msg_process_sleep_out(MSG_process_self()); MSG_RETURN(status); }
/** \ingroup msg_task_usage * \brief Sleep for the specified number of seconds * * Makes the current process sleep until \a time seconds have elapsed. * * \param nb_sec a number of second */ msg_error_t MSG_process_sleep(double nb_sec) { xbt_ex_t e; msg_error_t status = MSG_OK; /*msg_process_t proc = MSG_process_self();*/ #ifdef HAVE_TRACING TRACE_msg_process_sleep_in(MSG_process_self()); #endif /* create action to sleep */ /*proc->simdata->waiting_action = act_sleep; FIXME: check if not setting the waiting_action breaks something on msg proc->simdata->waiting_action = NULL;*/ TRY { simcall_process_sleep(nb_sec); } CATCH(e) { switch (e.category) { case cancel_error: status = MSG_TASK_CANCELED; break; default: RETHROW; } xbt_ex_free(e); } #ifdef HAVE_TRACING TRACE_msg_process_sleep_out(MSG_process_self()); #endif MSG_RETURN(status); }
/** \ingroup msg_task_usage * \brief Sleep for the specified number of seconds * * Makes the current process sleep until \a time seconds have elapsed. * * \param nb_sec a number of second */ msg_error_t MSG_process_sleep(double nb_sec) { msg_error_t status = MSG_OK; /*msg_process_t proc = MSG_process_self();*/ #ifdef HAVE_TRACING TRACE_msg_process_sleep_in(MSG_process_self()); #endif /* create action to sleep */ /*proc->simdata->waiting_action = act_sleep; FIXME: check if not setting the waiting_action breaks something on msg proc->simdata->waiting_action = NULL;*/ simcall_process_sleep(nb_sec); #ifdef HAVE_TRACING TRACE_msg_process_sleep_out(MSG_process_self()); #endif MSG_RETURN(status); }