From 90b2d4e92cf44d2697fd1368e53f1aecbd24893e Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 23 Jan 2019 23:22:58 +0100 Subject: [PATCH] Stop using Context::StopRequest directly in libsimgrid-java. --- src/bindings/java/jmsg.cpp | 2 +- src/bindings/java/jmsg_process.cpp | 24 ++++++++---------------- src/bindings/java/jmsg_task.cpp | 18 ++++++++---------- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/bindings/java/jmsg.cpp b/src/bindings/java/jmsg.cpp index 5e24128f7c..4ecd54ea9e 100644 --- a/src/bindings/java/jmsg.cpp +++ b/src/bindings/java/jmsg.cpp @@ -271,7 +271,7 @@ static void run_jprocess(JNIEnv *env, jobject jprocess) XBT_ATTRIB_UNUSED jint error = __java_vm->DetachCurrentThread(); xbt_assert(error == JNI_OK, "Cannot detach failing thread"); // simgrid::xbt::Backtrace().display(); - throw simgrid::kernel::context::Context::StopRequest(); + simgrid::kernel::context::throw_stoprequest(); } } diff --git a/src/bindings/java/jmsg_process.cpp b/src/bindings/java/jmsg_process.cpp index 0b569d1487..5ea0d3e586 100644 --- a/src/bindings/java/jmsg_process.cpp +++ b/src/bindings/java/jmsg_process.cpp @@ -225,11 +225,8 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_sleep(JNIEnv *env, jclass cl { double time = ((double)jmillis) / 1000 + ((double)jnanos) / 1000000000; msg_error_t rv; - try { - rv = MSG_process_sleep(time); - } catch (simgrid::kernel::context::Context::StopRequest const&) { - rv = MSG_HOST_FAILURE; - } + simgrid::kernel::context::try_n_catch_stoprequest([&rv, &time]() { rv = MSG_process_sleep(time); }, + [&rv]() { rv = MSG_HOST_FAILURE; }); if (rv != MSG_OK) { XBT_DEBUG("Something during the MSG_process_sleep invocation was wrong, trigger a HostFailureException"); @@ -240,11 +237,9 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_sleep(JNIEnv *env, jclass cl JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_waitFor(JNIEnv * env, jobject jprocess, jdouble jseconds) { msg_error_t rv; - try { - rv = MSG_process_sleep((double)jseconds); - } catch (simgrid::kernel::context::Context::StopRequest& e) { - jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed"); - } + simgrid::kernel::context::try_n_catch_stoprequest( + [&rv, &jseconds]() { rv = MSG_process_sleep((double)jseconds); }, + [&env]() { jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed"); }); if (env->ExceptionOccurred()) return; @@ -262,12 +257,9 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_kill(JNIEnv * env, jobject j jxbt_throw_notbound(env, "process", jprocess); return; } - try { - MSG_process_kill(process); - } catch (simgrid::kernel::context::Context::StopRequest& e) { - // XBT_INFO("Convert a StopRequest into a ProcessKilledError"); - jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed"); - } + simgrid::kernel::context::try_n_catch_stoprequest( + [&process]() { MSG_process_kill(process); }, + [&env]() { jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed"); }); } JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_migrate(JNIEnv * env, jobject jprocess, jobject jhost) diff --git a/src/bindings/java/jmsg_task.cpp b/src/bindings/java/jmsg_task.cpp index 0eec487e20..14764bd053 100644 --- a/src/bindings/java/jmsg_task.cpp +++ b/src/bindings/java/jmsg_task.cpp @@ -127,11 +127,9 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_execute(JNIEnv * env, jobject j return; } msg_error_t rv; - try { - rv = MSG_task_execute(task); - } catch (simgrid::kernel::context::Context::StopRequest& e) { - jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed"); - } + simgrid::kernel::context::try_n_catch_stoprequest( + [&rv, &task]() { rv = MSG_task_execute(task); }, + [&env] { jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed"); }); if (env->ExceptionOccurred()) return; @@ -288,11 +286,11 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_receive(JNIEnv* env, jclass const char *alias = env->GetStringUTFChars(jalias, 0); msg_error_t rv; - try { - rv = MSG_task_receive_ext(&task, alias, (double)jtimeout, /*host*/ nullptr); - } catch (simgrid::kernel::context::Context::StopRequest& e) { - jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed"); - } + simgrid::kernel::context::try_n_catch_stoprequest( + [&rv, &task, &alias, &jtimeout]() { + rv = MSG_task_receive_ext(&task, alias, (double)jtimeout, /*host*/ nullptr); + }, + [&env]() { jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed"); }); env->ReleaseStringUTFChars(jalias, alias); if (env->ExceptionOccurred()) return nullptr; -- 2.20.1