X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/681ccbd571ddd586398863c1c53167c9469bc857..5b98a105384bfed06a3c9fadddaaeeea03b1fa2f:/src/jmsg_synchro.c diff --git a/src/jmsg_synchro.c b/src/jmsg_synchro.c index d7399caf81..abffec41a6 100644 --- a/src/jmsg_synchro.c +++ b/src/jmsg_synchro.c @@ -8,24 +8,27 @@ #include "jmsg_synchro.h" #include "jxbt_utilities.h" +static jfieldID jsyncro_field_Mutex_bind; + +JNIEXPORT void JNICALL +Java_org_simgrid_msg_Mutex_nativeInit(JNIEnv *env, jclass cls) { + jsyncro_field_Mutex_bind = jxbt_get_sfield(env, "org/simgrid/msg/Mutex", "bind", "J"); + if (!jsyncro_field_Mutex_bind) { + jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug.")); + } +} JNIEXPORT void JNICALL Java_org_simgrid_msg_Mutex_init(JNIEnv * env, jobject obj) { xbt_mutex_t mutex = xbt_mutex_init(); - jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Mutex", "bind", "J"); - if (!id) return; - - (*env)->SetLongField(env, obj, id, (jlong) (long) (mutex)); + (*env)->SetLongField(env, obj, jsyncro_field_Mutex_bind, (jlong) (long) (mutex)); } JNIEXPORT void JNICALL Java_org_simgrid_msg_Mutex_acquire(JNIEnv * env, jobject obj) { xbt_mutex_t mutex; - jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Mutex", "bind", "J"); - if (!id) return; - - mutex = (xbt_mutex_t) (long) (*env)->GetLongField(env, obj, id); + mutex = (xbt_mutex_t) (long) (*env)->GetLongField(env, obj, jsyncro_field_Mutex_bind); xbt_mutex_acquire(mutex); } @@ -33,10 +36,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Mutex_release(JNIEnv * env, jobject obj) { xbt_mutex_t mutex; - jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Mutex", "bind", "J"); - if (!id) return; - - mutex = (xbt_mutex_t) (long) (*env)->GetLongField(env, obj, id); + mutex = (xbt_mutex_t) (long) (*env)->GetLongField(env, obj, jsyncro_field_Mutex_bind); xbt_mutex_release(mutex); } @@ -44,9 +44,6 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Mutex_exit(JNIEnv * env, jobject obj) { xbt_mutex_t mutex; - jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Mutex", "bind", "J"); - if (!id) return; - - mutex = (xbt_mutex_t) (long) (*env)->GetLongField(env, obj, id); + mutex = (xbt_mutex_t) (long) (*env)->GetLongField(env, obj, jsyncro_field_Mutex_bind); xbt_mutex_destroy(mutex); }