Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add cache on jmsg_syncro.c/Mutex.java
[simgrid.git] / src / jmsg_synchro.c
index d7399ca..abffec4 100644 (file)
@@ -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);
 }