return new JavaContextFactory();
}
-JavaContextFactory::JavaContextFactory()
- : ContextFactory("JavaContextFactory")
+JavaContextFactory::JavaContextFactory(): ContextFactory("JavaContextFactory")
{
}
-JavaContextFactory::~JavaContextFactory()
-{
-}
+JavaContextFactory::~JavaContextFactory()=default;
JavaContext* JavaContextFactory::self()
{
- return (JavaContext*) xbt_os_thread_get_extra_data();
+ return static_cast<JavaContext*>(xbt_os_thread_get_extra_data());
}
JavaContext* JavaContextFactory::create_context(
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;
void* JavaContext::wrapper(void *data)
{
- JavaContext* context = (JavaContext*)data;
+ JavaContext* context = static_cast<JavaContext*>(data);
xbt_os_thread_set_extra_data(context);
//Attach the thread to the JVM
JNIEnv *env;
XBT_ATTRIB_UNUSED jint error =
- __java_vm->AttachCurrentThread((void **) &env, nullptr);
+ __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.