X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/138e6f86566611611b1115c957cae0a1c6a85a4b..d442cebf6863fc131f3fcf453039a70e6b014d11:/src/bindings/java/jmsg_process.cpp diff --git a/src/bindings/java/jmsg_process.cpp b/src/bindings/java/jmsg_process.cpp index e9a59f6451..9d62ccf6f6 100644 --- a/src/bindings/java/jmsg_process.cpp +++ b/src/bindings/java/jmsg_process.cpp @@ -6,6 +6,8 @@ /* 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 + #include "jmsg_process.h" #include "jmsg.h" @@ -15,7 +17,7 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg); -extern "C" { +SG_BEGIN_DECL() jfieldID jprocess_field_Process_bind; jfieldID jprocess_field_Process_host; @@ -25,14 +27,9 @@ jfieldID jprocess_field_Process_name; jfieldID jprocess_field_Process_pid; jfieldID jprocess_field_Process_ppid; -JNIEXPORT void JNICALL -Java_org_simgrid_msg_Process_exit(JNIEnv *env, jobject jprocess) { - -} - jobject native_to_java_process(msg_process_t process) { - simgrid::java::JavaContext* context = (simgrid::java::JavaContext*) MSG_process_get_smx_ctx(process); + simgrid::kernel::context::JavaContext* context = (simgrid::kernel::context::JavaContext*) MSG_process_get_smx_ctx(process); return context->jprocess; } @@ -49,7 +46,7 @@ void jprocess_delete_global_ref(jobject jprocess, JNIEnv * env) void jprocess_join(jobject jprocess, JNIEnv * env) { msg_process_t process = jprocess_to_native_process(jprocess,env); - simgrid::java::JavaContext* context = (simgrid::java::JavaContext*) MSG_process_get_smx_ctx(process); + simgrid::kernel::context::JavaContext* context = (simgrid::kernel::context::JavaContext*) MSG_process_get_smx_ctx(process); xbt_os_thread_join(context->thread,nullptr); } @@ -86,6 +83,7 @@ jboolean jprocess_is_valid(jobject jprocess, JNIEnv * env) JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_nativeInit(JNIEnv *env, jclass cls) { jclass jprocess_class_Process = env->FindClass("org/simgrid/msg/Process"); + xbt_assert(jprocess_class_Process, "Native initialization of msg/Process failed. Please report that bug"); jprocess_field_Process_name = jxbt_get_jfield(env, jprocess_class_Process, "name", "Ljava/lang/String;"); jprocess_field_Process_bind = jxbt_get_jfield(env, jprocess_class_Process, "bind", "J"); @@ -94,10 +92,9 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_nativeInit(JNIEnv *env, jcla jprocess_field_Process_ppid = jxbt_get_jfield(env, jprocess_class_Process, "ppid", "I"); jprocess_field_Process_host = jxbt_get_jfield(env, jprocess_class_Process, "host", "Lorg/simgrid/msg/Host;"); jprocess_field_Process_killTime = jxbt_get_jfield(env, jprocess_class_Process, "killTime", "D"); - if (!jprocess_class_Process || !jprocess_field_Process_id || !jprocess_field_Process_name || - !jprocess_field_Process_pid || !jprocess_field_Process_ppid || !jprocess_field_Process_host) { - jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug.")); - } + xbt_assert(jprocess_field_Process_id && jprocess_field_Process_name && jprocess_field_Process_pid && + jprocess_field_Process_ppid && jprocess_field_Process_host, + "Native initialization of msg/Process failed. Please report that bug"); } JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_create(JNIEnv * env, jobject jprocess_arg, jobject jhostname) @@ -142,11 +139,11 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_create(JNIEnv * env, jobject 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_process_t process = SIMIX_process_self(); + 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::java::java_main_jprocess(jprocess); + simgrid::kernel::context::java_main_jprocess(jprocess); return 0; }, jprocess, host, @@ -175,12 +172,12 @@ JNIEXPORT jint JNICALL Java_org_simgrid_msg_Process_killAll(JNIEnv * env, jclass return (jint) MSG_process_killall((int) jresetPID); } -JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Process_fromPID(JNIEnv * env, jclass cls, jint PID) +JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Process_fromPID(JNIEnv * env, jclass cls, jint pid) { - msg_process_t process = MSG_process_from_PID(PID); + msg_process_t process = MSG_process_from_PID(pid); if (!process) { - jxbt_throw_process_not_found(env, bprintf("PID = %d",(int) PID)); + jxbt_throw_process_not_found(env, bprintf("PID = %d",static_cast(pid))); return nullptr; } @@ -352,7 +349,11 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_kill(JNIEnv * env, jobject j return; } - MSG_process_kill(process); + try { + MSG_process_kill(process); + } catch (xbt_ex& ex) { + XBT_VERB("This process just killed itself."); + } } JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_migrate(JNIEnv * env, jobject jprocess, jobject jhost) @@ -381,6 +382,11 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_migrate(JNIEnv * env, jobjec env->SetObjectField(jprocess, jprocess_field_Process_host, jhost); } +JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_yield(JNIEnv* env, jclass cls) +{ + MSG_process_yield(); +} + JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_setKillTime (JNIEnv *env , jobject jprocess, jdouble jkilltime) { msg_process_t process = jprocess_to_native_process(jprocess, env); MSG_process_set_kill_time(process, (double)jkilltime); @@ -390,4 +396,4 @@ JNIEXPORT jint JNICALL Java_org_simgrid_msg_Process_getCount(JNIEnv * env, jclas return (jint) MSG_process_get_number(); } -} +SG_END_DECL()