- smx_ctx_base_stop(context);
- /* detach the thread and kills it */
- JNIEnv *env = ctx_java->jenv;
- (*env)->DeleteGlobalRef(env,ctx_java->jprocess);
- JavaVM *jvm = get_current_vm();
- jint error = (*jvm)->DetachCurrentThread(jvm);
- 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);
+ if (ctx_java->killed == 1) {
+ ctx_java->killed = 0;
+ JNIEnv *env = get_current_thread_env();
+ jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledException", bprintf("Process killed :)"));
+ 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);
+ JavaVM *jvm = get_current_vm();
+ jint error = (*jvm)->DetachCurrentThread(jvm);
+ 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);
+
+ }