Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Getting rid of C exceptions
[simgrid.git] / src / bindings / java / JavaContext.cpp
index 54b394f..21af372 100644 (file)
@@ -74,14 +74,27 @@ JavaContext::JavaContext(std::function<void()> code,
     this->begin = xbt_os_sem_init(0);
     this->end = xbt_os_sem_init(0);
 
-    TRY {
+    try {
        this->thread = xbt_os_thread_create(
          nullptr, JavaContext::wrapper, this, nullptr);
     }
-    CATCH_ANONYMOUS {
-      RETHROWF("Failed to create context #%d. You may want to switch to Java coroutines to increase your limits (error: %s)."
-               "See the Install section of simgrid-java documentation (in doc/install.html) for more on coroutines.",
-               thread_amount);
+    catch (xbt_ex& ex) {
+      char* str = bprintf(
+        "Failed to create context #%d. You may want to switch to Java coroutines to increase your limits (error: %s)."
+        "See the Install section of simgrid-java documentation (in doc/install.html) for more on coroutines.",
+        thread_amount, ex.what());
+      xbt_ex new_exception(str);
+      free(str);
+      new_exception.category = ex.category;
+      new_exception.value = ex.value;
+      new_exception.procname = ex.procname;
+      new_exception.file = ex.file;
+      new_exception.line = ex.line;
+      new_exception.func = ex.func;
+      new_exception.pid = ex.pid;
+      new_exception.bt = ex.bt;
+      new_exception.bt_strings = ex.bt_strings;
+      throw new_exception;
     }
   } else {
     this->thread = nullptr;
@@ -107,7 +120,7 @@ void* JavaContext::wrapper(void *data)
 
   JNIEnv *env;
   XBT_ATTRIB_UNUSED jint error =
-    __java_vm->AttachCurrentThread((void **) &env, NULL);
+    __java_vm->AttachCurrentThread((void **) &env, nullptr);
   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.
@@ -143,7 +156,7 @@ void JavaContext::stop()
     XBT_ATTRIB_UNUSED jint error = __java_vm->DetachCurrentThread();
     xbt_assert((error == JNI_OK), "The thread couldn't be detached.");
     xbt_os_sem_release(this->end);
-    xbt_os_thread_exit(NULL);
+    xbt_os_thread_exit(nullptr);
   }
 }