Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix msg_host_is_avai... in msg_host_is_on - adrien
[simgrid.git] / src / bindings / java / smx_context_java.c
index de3518834bd5c8afa7d0924a0d848100803fce3e..a7677d5b917fb417fa4307a9b9167000bdfb06ae 100644 (file)
@@ -96,7 +96,7 @@ static void* smx_ctx_java_thread_run(void *data) {
   xbt_os_thread_set_extra_data(context);
   //Attach the thread to the JVM
   JNIEnv *env;
-  jint error = (*__java_vm)->AttachCurrentThread(__java_vm, (void **) &env, NULL);
+  _XBT_GNUC_UNUSED jint error = (*__java_vm)->AttachCurrentThread(__java_vm, (void **) &env, NULL);
   xbt_assert((error == JNI_OK), "The thread could not be attached to the JVM");
   context->jenv = get_current_thread_env();
   //Wait for the first scheduling round to happen.
@@ -153,14 +153,20 @@ void smx_ctx_java_stop(smx_context_t context)
   if (context->iwannadie) {
     context->iwannadie = 0;
     JNIEnv *env = get_current_thread_env();
-    jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", xbt_strdup("Process killed :)"));
+    XBT_DEBUG("Gonnal launch Killed Error");
+    // TODO Adrien, if the process has not been created at the java layer, why should we raise the exception/error at the java level (this happens
+    // for instance during the migration process that creates at the C level two processes: one on the SRC node and one on the DST node, if the DST process is killed. 
+    // it is not required to raise an exception at the JAVA level, the low level should be able to manage such an issue correctly but this is not the case right now unfortunately ...
+    // TODO it will be nice to have the name of the process to help the end-user to know which Process has been killed
+    jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", xbt_strdup("Process killed :) (file smx_context_java.c)"));
+    XBT_DEBUG("Trigger a cancel error at the C level");
     THROWF(cancel_error, 0, "process cancelled");
   } else {
     smx_ctx_base_stop(context);
     /* detach the thread and kills it */
     JNIEnv *env = ctx_java->jenv;
     (*env)->DeleteGlobalRef(env,ctx_java->jprocess);
-    jint error = (*__java_vm)->DetachCurrentThread(__java_vm);
+    _XBT_GNUC_UNUSED jint error = (*__java_vm)->DetachCurrentThread(__java_vm);
     xbt_assert((error == JNI_OK), "The thread couldn't be detached.");
     xbt_os_sem_release(((smx_ctx_java_t)context)->end);
     xbt_os_thread_exit(NULL);