Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add cache on jmsg_syncro.c/Mutex.java
authorSamuel Lepetit <samuel.lepetit@inria.fr>
Wed, 9 May 2012 13:50:29 +0000 (15:50 +0200)
committerSamuel Lepetit <samuel.lepetit@inria.fr>
Wed, 9 May 2012 13:50:29 +0000 (15:50 +0200)
org/simgrid/msg/Mutex.java
src/jmsg_synchro.c
src/jmsg_synchro.h

index 5f88151..b88e4d2 100644 (file)
@@ -24,4 +24,13 @@ public class Mutex {
        public native void acquire();
        public native void release();
        
        public native void acquire();
        public native void release();
        
+       /**
+        * Class initializer, to initialize various JNI stuff
+        */
+       public static native void nativeInit();
+       static {
+               nativeInit();
+       }       
 }
 }
+
+
index d7399ca..abffec4 100644 (file)
@@ -8,24 +8,27 @@
 #include "jmsg_synchro.h"
 #include "jxbt_utilities.h"
 
 #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();
 
 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;
 
 }
 
 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);
 }
 
        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;
 
 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);
 }
 
        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;
 
 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);
 }
                xbt_mutex_destroy(mutex);
 }
index 24488a3..46aefc8 100644 (file)
@@ -13,6 +13,9 @@
 #include <msg/msg.h>
 #include <simgrid/simix.h>
 
 #include <msg/msg.h>
 #include <simgrid/simix.h>
 
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Mutex_nativeInit(JNIEnv *env, jclass cls);
+
 JNIEXPORT void JNICALL
 Java_org_simgrid_msg_Mutex_init(JNIEnv * env, jobject obj);
 
 JNIEXPORT void JNICALL
 Java_org_simgrid_msg_Mutex_init(JNIEnv * env, jobject obj);