From: motse Date: Tue, 9 Nov 2004 11:54:53 +0000 (+0000) Subject: fix delayed jni init for disabled threads build X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=b5c1fcbaef08ec15e531d2988b245d214c99f2e2;p=cacao.git fix delayed jni init for disabled threads build --- diff --git a/jni.c b/jni.c index 95ab2c471..89f60da56 100644 --- a/jni.c +++ b/jni.c @@ -28,7 +28,7 @@ Changes: Joseph Wenninger, Martin Platter - $Id: jni.c 1470 2004-11-08 22:57:28Z motse $ + $Id: jni.c 1471 2004-11-09 11:54:53Z motse $ */ @@ -3188,26 +3188,36 @@ jint AttachCurrentThreadAsDaemon(JavaVM *vm, void **par1, void *par2) /************* JNI Initialization ****************************************************/ jobject jni_init1(JNIEnv* env, jobject lobj) { +#if defined(USE_THREADS) while (initrunning) {yieldThread();} /* wait until init is done */ - if (global_ref_table != NULL) { +#endif + if (global_ref_table == NULL) { + jni_init(); + } +#if defined(USE_THREADS) + else { /* wait until jni_init is done */ MonitorEnter(env, *global_ref_table) ; MonitorExit(env, *global_ref_table); - } else { - jni_init(); } +#endif return NewGlobalRef(env, lobj); } void jni_init2(JNIEnv* env, jobject gref) { log_text("DeleteGlobalref called before NewGlobalref"); +#if defined(USE_THREADS) while (initrunning) {yieldThread();} /* wait until init is done */ - if (global_ref_table != NULL) { +#endif + if (global_ref_table == NULL) { + jni_init(); + } +#if defined(USE_THREADS) + else { /* wait until jni_init is done */ MonitorEnter(env, *global_ref_table) ; MonitorExit(env, *global_ref_table); - } else { - jni_init(); } +#endif DeleteGlobalRef(env, gref); } diff --git a/src/native/jni.c b/src/native/jni.c index 95ab2c471..89f60da56 100644 --- a/src/native/jni.c +++ b/src/native/jni.c @@ -28,7 +28,7 @@ Changes: Joseph Wenninger, Martin Platter - $Id: jni.c 1470 2004-11-08 22:57:28Z motse $ + $Id: jni.c 1471 2004-11-09 11:54:53Z motse $ */ @@ -3188,26 +3188,36 @@ jint AttachCurrentThreadAsDaemon(JavaVM *vm, void **par1, void *par2) /************* JNI Initialization ****************************************************/ jobject jni_init1(JNIEnv* env, jobject lobj) { +#if defined(USE_THREADS) while (initrunning) {yieldThread();} /* wait until init is done */ - if (global_ref_table != NULL) { +#endif + if (global_ref_table == NULL) { + jni_init(); + } +#if defined(USE_THREADS) + else { /* wait until jni_init is done */ MonitorEnter(env, *global_ref_table) ; MonitorExit(env, *global_ref_table); - } else { - jni_init(); } +#endif return NewGlobalRef(env, lobj); } void jni_init2(JNIEnv* env, jobject gref) { log_text("DeleteGlobalref called before NewGlobalref"); +#if defined(USE_THREADS) while (initrunning) {yieldThread();} /* wait until init is done */ - if (global_ref_table != NULL) { +#endif + if (global_ref_table == NULL) { + jni_init(); + } +#if defined(USE_THREADS) + else { /* wait until jni_init is done */ MonitorEnter(env, *global_ref_table) ; MonitorExit(env, *global_ref_table); - } else { - jni_init(); } +#endif DeleteGlobalRef(env, gref); }