X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/15aaca83615a41756bd4c2ad8d39e80e6c869bb1..0704134e6e2ad0b078f9fc1fa8f1f8937d76896a:/src/jmsg.c diff --git a/src/jmsg.c b/src/jmsg.c index ae5dd0a6f2..61d916b6db 100644 --- a/src/jmsg.c +++ b/src/jmsg.c @@ -20,6 +20,15 @@ #include "jmsg.h" +/* Shut up some errors in eclipse online compiler. I wish such a pimple wouldn't be needed */ +#ifndef JNIEXPORT +#define JNIEXPORT +#endif +#ifndef JNICALL +#define JNICALL +#endif +/* end of eclipse-mandated pimple */ + XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg); static JavaVM *__java_vm = NULL; @@ -176,9 +185,6 @@ Java_org_simgrid_msg_MsgNative_processKill(JNIEnv * env, jclass cls, return; } - /* delete the global reference */ - jprocess_delete_global_ref(native_to_java_process(process), env); - /* kill the native process (this wrapper is call by the destructor of the java * process instance) */ @@ -343,7 +349,7 @@ Java_org_simgrid_msg_MsgNative_hostGetByName(JNIEnv * env, jclass cls, if (!MSG_host_get_data(host)) { /* native host not associated yet with java host */ - /* instanciate a new java host */ + /* Instantiate a new java host */ jhost = jhost_new_instance(env); if (!jhost) { @@ -389,7 +395,10 @@ Java_org_simgrid_msg_MsgNative_hostGetName(JNIEnv * env, jclass cls, JNIEXPORT jint JNICALL Java_org_simgrid_msg_MsgNative_hostGetNumber(JNIEnv * env, jclass cls) { - return (jint) MSG_get_host_number(); + xbt_dynar_t hosts = MSG_hosts_as_dynar(); + int nb_host = xbt_dynar_length(hosts); + xbt_dynar_free(&hosts); + return (jint) nb_host; } JNIEXPORT jobject JNICALL @@ -725,13 +734,11 @@ Java_org_simgrid_msg_MsgNative_taskDestroy(JNIEnv * env, jclass cls, /* get the native task */ m_task_t task = jtask_to_native_task(jtask_arg, env); -// jobject jtask; if (!task) { jxbt_throw_notbound(env, "task", task); return; } -// jtask = (jobject) MSG_task_get_data(task); MSG_error_t rv = MSG_task_destroy(task); @@ -753,7 +760,7 @@ Java_org_simgrid_msg_MsgNative_taskExecute(JNIEnv * env, jclass cls, MSG_error_t rv = MSG_task_execute(task); jxbt_check_res("MSG_task_execute()", rv, - MSG_HOST_FAILURE | MSG_TASK_CANCELLED, + MSG_HOST_FAILURE | MSG_TASK_CANCELED, bprintf("while executing task %s", MSG_task_get_name(task))); } @@ -762,13 +769,6 @@ Java_org_simgrid_msg_MsgNative_taskExecute(JNIEnv * env, jclass cls, * Unsortable functions * ***************************************************************************************/ - -JNIEXPORT jint JNICALL -Java_org_simgrid_msg_Msg_getErrCode(JNIEnv * env, jclass cls) -{ - return (jint) MSG_get_errno(); -} - JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Msg_getClock(JNIEnv * env, jclass cls) { @@ -790,16 +790,16 @@ Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, jobjectArray jargs) argc = (int) (*env)->GetArrayLength(env, jargs); argc++; - argv = xbt_new0(char *, argc); + argv = xbt_new(char *, argc + 1); argv[0] = strdup("java"); for (index = 0; index < argc - 1; index++) { jval = (jstring) (*env)->GetObjectArrayElement(env, jargs, index); tmp = (*env)->GetStringUTFChars(env, jval, 0); argv[index + 1] = strdup(tmp); - //argv[index] = strdup(tmp); (*env)->ReleaseStringUTFChars(env, jval, tmp); } + argv[argc] = NULL; MSG_global_init(&argc, argv); @@ -815,8 +815,8 @@ JNIEXPORT void JNICALL JNICALL Java_org_simgrid_msg_Msg_run(JNIEnv * env, jclass cls) { MSG_error_t rv; - int index; //xbt_fifo_item_t item = NULL; - m_host_t *hosts; + int index; + xbt_dynar_t hosts; jobject jhost; /* Run everything */ @@ -831,22 +831,26 @@ JNIEXPORT void JNICALL XBT_INFO("Clean java world"); /* Cleanup java hosts */ - hosts = MSG_get_host_table(); - for (index = 0; index < MSG_get_host_number() - 1; index++) { - jhost = (jobject) hosts[index]->data; + hosts = MSG_hosts_as_dynar(); + for (index = 0; index < xbt_dynar_length(hosts) - 1; index++) { + jhost = (jobject) xbt_dynar_get_as(hosts,index,m_host_t)->data; if (jhost) jhost_unref(env, jhost); } - + xbt_dynar_free(&hosts); XBT_INFO("Clean native world"); - /* cleanup native stuff */ - rv = MSG_OK != MSG_clean(); +} +JNIEXPORT void JNICALL + JNICALL Java_org_simgrid_msg_Msg_clean(JNIEnv * env, jclass cls) +{ + /* cleanup native stuff. Calling it is ... useless since leaking memory at the end of the simulation is a non-issue */ + MSG_error_t rv = MSG_OK != MSG_clean(); jxbt_check_res("MSG_clean()", rv, MSG_OK, bprintf ("unexpected error : MSG_clean() failed .. please report this bug ")); } - + JNIEXPORT jint JNICALL Java_org_simgrid_msg_MsgNative_processKillAll(JNIEnv * env, jclass cls, jint jresetPID) @@ -899,8 +903,8 @@ Java_org_simgrid_msg_MsgNative_allHosts(JNIEnv * env, jclass cls_arg) jstring jname; m_host_t host; - int count = MSG_get_host_number(); - m_host_t *table = MSG_get_host_table(); + xbt_dynar_t table = MSG_hosts_as_dynar(); + int count = xbt_dynar_length(table); jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host"); @@ -916,7 +920,7 @@ Java_org_simgrid_msg_MsgNative_allHosts(JNIEnv * env, jclass cls_arg) } for (index = 0; index < count; index++) { - host = table[index]; + host = xbt_dynar_get_as(table,index,m_host_t); jhost = (jobject) (MSG_host_get_data(host)); if (!jhost) { @@ -929,7 +933,7 @@ Java_org_simgrid_msg_MsgNative_allHosts(JNIEnv * env, jclass cls_arg) (*env)->SetObjectArrayElement(env, jtable, index, jhost); } - + xbt_dynar_free(&table); return jtable; }