Hi,
jcl.c currently tries to turn a local reference into a global one after
having deleted the local reference.
(*env)->DeleteLocalRef(env, rawDataClass);
rawDataClass = (*env)->NewGlobalRef (env, rawDataClass);
Is my interpretation right that this is not allowed by the JNI spec?
(The attached patch works for me.)
d.
Index: native/jni/classpath/jcl.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jcl.c,v
retrieving revision 1.16
diff -u -r1.16 jcl.c
--- native/jni/classpath/jcl.c 3 Aug 2005 14:48:32 -0000 1.16
+++ native/jni/classpath/jcl.c 11 Sep 2005 18:22:06 -0000
@@ -193,6 +193,8 @@
{
if (rawDataClass == NULL)
{
+ jclass tmp;
+
#ifdef POINTERS_ARE_64BIT
rawDataClass = (*env)->FindClass (env, "gnu/classpath/Pointer64");
if (rawDataClass == NULL)
@@ -243,14 +245,15 @@
}
#endif
- (*env)->DeleteLocalRef(env, rawDataClass);
- rawDataClass = (*env)->NewGlobalRef (env, rawDataClass);
- if (rawDataClass == NULL)
+ tmp = (*env)->NewGlobalRef (env, rawDataClass);
+ if (tmp == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to create an internal global ref");
return NULL;
}
+ (*env)->DeleteLocalRef(env, rawDataClass);
+ rawDataClass = tmp;
}
#ifdef POINTERS_ARE_64BIT
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches