X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2de2832b7299cb63d92677ae2c74bd40bdc6c826..53c4b4c954141e97f5f462549b309507e5b3306b:/src/bindings/java/jmsg_process.cpp diff --git a/src/bindings/java/jmsg_process.cpp b/src/bindings/java/jmsg_process.cpp index 63c44a5e35..e838a687bb 100644 --- a/src/bindings/java/jmsg_process.cpp +++ b/src/bindings/java/jmsg_process.cpp @@ -14,7 +14,7 @@ #include "jxbt_utilities.h" #include "JavaContext.hpp" -XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg); +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(java); SG_BEGIN_DECL() @@ -76,28 +76,25 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_create(JNIEnv * env, jobject { jobject jprocess; /* the global reference to the java process instance */ jstring jname; /* the name of the java process instance */ - const char *name; /* the C name of the process */ - const char *hostname; - msg_process_t process; /* the native process to create */ msg_host_t host; /* Where that process lives */ - hostname = env->GetStringUTFChars((jstring) jhostname, 0); /* get the name of the java process */ jname = jprocess_get_name(jprocess_arg, env); if (!jname) { - jxbt_throw_null(env, - xbt_strdup("Internal error: Process name cannot be nullptr")); + jxbt_throw_null(env, xbt_strdup("Process name cannot be nullptr")); return; } + const char* name = env->GetStringUTFChars(jname, 0); /* bind/retrieve the msg host */ + const char* hostname = env->GetStringUTFChars((jstring)jhostname, 0); host = MSG_host_by_name(hostname); - if (!(host)) { /* not bound */ jxbt_throw_host_not_found(env, hostname); return; } + env->ReleaseStringUTFChars((jstring)jhostname, hostname); /* create a global java process instance */ jprocess = jprocess_ref(jprocess_arg, env); @@ -106,32 +103,18 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_create(JNIEnv * env, jobject return; } - /* build the C name of the process */ - name = env->GetStringUTFChars(jname, 0); - name = xbt_strdup(name); - - /* Retrieve the kill time from the process */ - jdouble jkill = env->GetDoubleField(jprocess, jprocess_field_Process_killTime); /* Actually build the MSG process */ - process = MSG_process_create_with_environment(name, [](int argc, char** argv) -> int { - smx_actor_t process = SIMIX_process_self(); - // This is the jprocess passed as environment. - // It would be simplet if we could use a closure. - jobject jprocess = (jobject) MSG_process_get_data(process); - simgrid::kernel::context::java_main_jprocess(jprocess); - return 0; - }, jprocess, - host, - /*argc, argv, properties*/ - 0, nullptr, nullptr); - MSG_process_set_kill_time(process, (double)jkill); + msg_process_t process = MSG_process_create_from_stdfunc( + name, [jprocess]() -> void { simgrid::kernel::context::java_main_jprocess(jprocess); }, + /*data*/ nullptr, host, /* properties*/ nullptr); + + env->ReleaseStringUTFChars(jname, name); /* bind the java process instance to the native process */ jprocess_bind(jprocess, process, env); - /* release our reference to the process name (variable name becomes invalid) */ - //FIXME : This line should be uncommented but with mac it doesn't work. BIG WARNING - //env->ReleaseStringUTFChars(jname, name); - env->ReleaseStringUTFChars((jstring) jhostname, hostname); + /* Retrieve the kill time from the process */ + jdouble jkill = env->GetDoubleField(jprocess, jprocess_field_Process_killTime); + MSG_process_set_kill_time(process, (double)jkill); /* sets the PID and the PPID of the process */ env->SetIntField(jprocess, jprocess_field_Process_pid,(jint) MSG_process_get_PID(process)); @@ -299,7 +282,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_sleep(JNIEnv *env, jclass cl // is a cancelled_error, see bindings/java/smx_context_java.c, function void smx_ctx_java_stop(smx_context_t context) and src/msg/msg_gos.c // function msg_error_t MSG_process_sleep(double nb_sec) - jxbt_throw_host_failure(env,nullptr); + jxbt_throw_host_failure(env, ""); } }