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);
+ new_exception.category = ex.category;
+ new_exception.value = ex.value;
+ new_exception.file = __FILE__;
+ new_exception.line = __LINE__;
+ new_exception.func = __func__;
+ std::throw_with_nested(std::move(new_exception));
}
} else {
this->thread = nullptr;
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.
// jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", bprintf("Process %s killed :) (file smx_context_java.c)", MSG_process_get_name( (msg_process_t)context) ));
jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError",
bprintf("Process %s killed :) (file JavaContext.cpp)",
- simcall_process_get_name((smx_process_t) SIMIX_context_get_process(this))) );
+ simcall_process_get_name(this->process()) ));
XBT_DEBUG("Trigger a cancel error at the C level");
THROWF(cancel_error, 0, "process cancelled");
} else {
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);
}
}