X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/601b0b84937fb065edd43e83f755e2eae4a1de0e..d42ce90fe5e354b95e5969c2eb422a6e8a71f4df:/src/jmsg_task.c diff --git a/src/jmsg_task.c b/src/jmsg_task.c index f91185b22e..86fe919ab6 100644 --- a/src/jmsg_task.c +++ b/src/jmsg_task.c @@ -16,11 +16,13 @@ #include "jxbt_utilities.h" #include + XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg); -static jmethodID jtask_field_Comm_constructor; +static jmethodID jtask_method_Comm_constructor; static jfieldID jtask_field_Task_bind; +static jfieldID jtask_field_Task_name; static jfieldID jtask_field_Comm_bind; static jfieldID jtask_field_Comm_taskBind; static jfieldID jtask_field_Comm_receiving; @@ -43,15 +45,16 @@ jboolean jtask_is_valid(jobject jtask, JNIEnv * env) JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_nativeInit(JNIEnv *env, jclass cls) { jclass jtask_class_Comm = (*env)->FindClass(env, "org/simgrid/msg/Comm"); - - jtask_field_Comm_constructor = (*env)->GetMethodID(env, jtask_class_Comm, "", "()V"); - //FIXME: Don't use jxbt_get_sfield directly, it is slower. - jtask_field_Task_bind = jxbt_get_sfield(env, "org/simgrid/msg/Task", "bind", "J"); - jtask_field_Comm_bind = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "bind", "J"); - jtask_field_Comm_taskBind = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "taskBind", "J"); - jtask_field_Comm_receiving = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "receiving", "Z"); - if (!jtask_field_Task_bind || !jtask_field_Comm_bind || !jtask_field_Comm_taskBind || - !jtask_field_Comm_receiving || !jtask_field_Comm_constructor) { + jclass jtask_class_Task = (*env)->FindClass(env, "org/simgrid/msg/Task"); + + jtask_method_Comm_constructor = (*env)->GetMethodID(env, jtask_class_Comm, "", "()V"); + jtask_field_Task_bind = jxbt_get_jfield(env, jtask_class_Task, "bind", "J"); + jtask_field_Task_name = jxbt_get_jfield(env, jtask_class_Task, "name", "Ljava/lang/String;"); + jtask_field_Comm_bind = jxbt_get_jfield(env, jtask_class_Comm, "bind", "J"); + jtask_field_Comm_taskBind = jxbt_get_jfield(env, jtask_class_Comm, "taskBind", "J"); + jtask_field_Comm_receiving = jxbt_get_jfield(env, jtask_class_Comm, "receiving", "Z"); + if (!jtask_field_Task_bind || !jtask_class_Task || !jtask_field_Comm_bind || !jtask_field_Comm_taskBind || + !jtask_field_Comm_receiving || !jtask_method_Comm_constructor) { jxbt_throw_native(env,bprintf("Can't find some fields in Java class.")); } } @@ -92,7 +95,8 @@ Java_org_simgrid_msg_Task_create(JNIEnv * env, (double) jmessageSize, NULL); if (jname) (*env)->ReleaseStringUTFChars(env, jname, name); - + /* sets the task name */ + (*env)->SetObjectField(env, jtask, jtask_field_Task_name, jname); /* bind & store the task */ jtask_bind(jtask, task, env); MSG_task_set_data(task, jtask); @@ -175,7 +179,8 @@ Java_org_simgrid_msg_Task_parallelCreate(JNIEnv * env, messageSizes, NULL); (*env)->ReleaseStringUTFChars(env, jname, name); - + /* sets the task name */ + (*env)->SetObjectField(env, jtask, jtask_field_Task_name, jname); /* associate the java task object and the native task */ jtask_bind(jtask, task, env); @@ -301,7 +306,21 @@ Java_org_simgrid_msg_Task_getRemainingDuration(JNIEnv * env, jobject jtask) } return (jdouble) MSG_task_get_remaining_computation(ptask); } +JNIEXPORT void JNICALL +Java_org_simgrid_msg_Task_setName(JNIEnv *env, jobject jtask, jobject jname) { + m_task_t task = jtask_to_native_task(jtask, env); + + if (!task) { + jxbt_throw_notbound(env, "task", jtask); + return; + } + const char *name = (*env)->GetStringUTFChars(env, jname, 0); + + (*env)->SetObjectField(env, jtask, jtask_field_Task_name, jname); + MSG_task_set_name(task, name); + (*env)->ReleaseStringUTFChars(env, jname, name); +} JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setPriority(JNIEnv * env, jobject jtask, jdouble priority) @@ -315,6 +334,17 @@ Java_org_simgrid_msg_Task_setPriority(JNIEnv * env, MSG_task_set_priority(task, (double) priority); } JNIEXPORT void JNICALL +Java_org_simgrid_msg_Task_setComputeDuration + (JNIEnv *env, jobject jtask, jdouble computationAmount) { + m_task_t task = jtask_to_native_task(jtask, env); + + if (!task) { + jxbt_throw_notbound(env, "task", jtask); + return; + } + MSG_task_set_compute_duration(task, (double) computationAmount); +} +JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_send(JNIEnv * env,jobject jtask, jstring jalias, jdouble jtimeout) @@ -395,8 +425,12 @@ Java_org_simgrid_msg_Task_receive(JNIEnv * env, jclass cls, } alias = (*env)->GetStringUTFChars(env, jalias, 0); - - rv = MSG_task_receive_ext(&task, alias, (double) jtimeout, host); + TRY { + rv = MSG_task_receive_ext(&task, alias, (double) jtimeout, host); + } + CATCH_ANONYMOUS { + return NULL; + } if (rv != MSG_OK) { switch (rv) { case MSG_TIMEOUT: @@ -446,7 +480,7 @@ Java_org_simgrid_msg_Task_irecv(JNIEnv * env, jclass cls, jstring jmailbox) { return NULL; } - jobject jcomm = (*env)->NewObject(env, comm_class, jtask_field_Comm_constructor); + jobject jcomm = (*env)->NewObject(env, comm_class, jtask_method_Comm_constructor); if (!jcomm) { jxbt_throw_native(env,bprintf("Can't create a Comm object.")); return NULL; @@ -480,7 +514,7 @@ Java_org_simgrid_msg_Task_isend(JNIEnv *env, jobject jtask, jstring jmailbox) { if (!comm_class) return NULL; - jcomm = (*env)->NewObject(env, comm_class, jtask_field_Comm_constructor); + jcomm = (*env)->NewObject(env, comm_class, jtask_method_Comm_constructor); mailbox = (*env)->GetStringUTFChars(env, jmailbox, 0); task = jtask_to_native_task(jtask, env); @@ -545,9 +579,12 @@ Java_org_simgrid_msg_Task_listen(JNIEnv * env, jclass cls, int rv; alias = (*env)->GetStringUTFChars(env, jalias, 0); - - rv = MSG_task_listen(alias); - + TRY { + rv = MSG_task_listen(alias); + } + CATCH_ANONYMOUS { + return 0; + } (*env)->ReleaseStringUTFChars(env, jalias, alias); return (jboolean) rv; @@ -567,9 +604,12 @@ Java_org_simgrid_msg_Task_listenFromHost(JNIEnv * env, jclass cls, return -1; } alias = (*env)->GetStringUTFChars(env, jalias, 0); - - rv = MSG_task_listen_from_host(alias, host); - + TRY { + rv = MSG_task_listen_from_host(alias, host); + } + CATCH_ANONYMOUS { + return 0; + } (*env)->ReleaseStringUTFChars(env, jalias, alias); return (jint) rv; @@ -582,9 +622,12 @@ Java_org_simgrid_msg_Task_listenFrom(JNIEnv * env, jclass cls, int rv; const char *alias = (*env)->GetStringUTFChars(env, jalias, 0); - - rv = MSG_task_listen_from(alias); - + TRY { + rv = MSG_task_listen_from(alias); + } + CATCH_ANONYMOUS { + return 0; + } (*env)->ReleaseStringUTFChars(env, jalias, alias); return (jint) rv;