/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include "simgrid/Exception.hpp"
#include "simgrid/s4u/Host.hpp"
#include "src/kernel/context/Context.hpp"
return;
}
msg_error_t rv;
- if (not simgrid::kernel::context::try_n_catch_stoprequest([&rv, &task]() { rv = MSG_task_execute(task); })) {
+ if (not simgrid::ForcefulKillException::try_n_catch([&rv, &task]() { rv = MSG_task_execute(task); })) {
jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed");
}
const char *alias = env->GetStringUTFChars(jalias, 0);
msg_error_t rv;
- if (not simgrid::kernel::context::try_n_catch_stoprequest([&rv, &task, &alias, &jtimeout]() {
- rv = MSG_task_receive_ext(&task, alias, (double)jtimeout, /*host*/ nullptr);
- })) {
+ if (not simgrid::ForcefulKillException::try_n_catch(
+ [&rv, &task, &alias, &jtimeout]() { rv = MSG_task_receive_with_timeout(&task, alias, (double)jtimeout); })) {
jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed");
}
env->ReleaseStringUTFChars(jalias, alias);
static void msg_task_cancel_on_failed_dsend(void*t) {
msg_task_t task = (msg_task_t) t;
- JNIEnv *env =get_current_thread_env();
- jobject jtask_global = (jobject) MSG_task_get_data(task);
-
- /* Destroy the global ref so that the JVM can free the stuff */
- env->DeleteGlobalRef(jtask_global);
+ JNIEnv* env = get_current_thread_env();
+ if (env) {
+ jobject jtask_global = (jobject)MSG_task_get_data(task);
+ /* Destroy the global ref so that the JVM can free the stuff */
+ env->DeleteGlobalRef(jtask_global);
+ /* Don't free the C data here, to avoid a race condition with the GC also sometimes doing so.
+ * A rare memleak is seen as preferable to a rare "free(): invalid pointer" failure that
+ * proves really hard to debug.
+ */
+ }
MSG_task_set_data(task, nullptr);
- /* Don't free the C data here, to avoid a race condition with the GC also sometimes doing so.
- * A rare memleak is seen as preferable to a rare "free(): invalid pointer" failure that
- * proves really hard to debug.
- */
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_dsend(JNIEnv * env, jobject jtask, jstring jalias)