msg_error_t rv;
rv = MSG_process_sleep(time);
if (rv != MSG_OK) {
- jmsg_throw_status(env,rv);
+ XBT_DEBUG("Something during the MSG_process_sleep invocation was wrong, trigger a HostFailureException");
+
+ //jmsg_throw_status(env,rv);
+
+ // adsein, the code above as been replaced by the code below. Indeed, according to the documentation, a sleep can only
+ // trigger a host_failure exception. When the sleep crashes due to a host shutdown, the exception thrown by smx_context_java.c
+ // is a cancelled_error, see bindings/java/smx_context_java.c, function void smx_ctx_java_stop(smx_context_t context) and src/msg/msg_gos.c
+ // function msg_error_t MSG_process_sleep(double nb_sec)
+
+ jxbt_throw_host_failure(env,NULL);
}
}
JNIEXPORT void JNICALL
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 execption 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:
switch(surf_action_get_state(action->sleep.surf_sleep)){
case SURF_ACTION_FAILED:
simcall->issuer->context->iwannadie = 1;
- //SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
+ //SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
state = SIMIX_SRC_HOST_FAILURE;
break;
if (self->context->iwannadie){
XBT_DEBUG("I wanna die!");
SIMIX_process_stop(self);
+ XBT_DEBUG("SIMIX Stop done");
}
if (self->suspended) {