summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libjava/ChangeLog9
-rw-r--r--libjava/jni.cc11
-rw-r--r--libjava/testsuite/libjava.jni/PR28178.c10
-rw-r--r--libjava/testsuite/libjava.jni/PR28178.java15
-rw-r--r--libjava/testsuite/libjava.jni/PR28178.out0
5 files changed, 45 insertions, 0 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index d87c1b9bad9..e6d1bbb69ac 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,12 @@
+2006-06-27 Tom Tromey <tromey@redhat.com>
+
+ PR libgcj/28178:
+ * jni.cc (_Jv_JNI_DeleteLocalRef): Ignore null argument.
+ (_Jv_JNI_DeleteGlobalRef): Likewise.
+ * testsuite/libjava.jni/PR28178.java: New file.
+ * testsuite/libjava.jni/PR28178.c: New file.
+ * testsuite/libjava.jni/PR28178.out: New file.
+
2006-06-26 Keith Seitz <keiths@redhat.com>
* include/posix-threads.h: Fix coding style aberrations from
diff --git a/libjava/jni.cc b/libjava/jni.cc
index 19539c7714a..67ba8fa4941 100644
--- a/libjava/jni.cc
+++ b/libjava/jni.cc
@@ -248,6 +248,12 @@ _Jv_JNI_DeleteGlobalRef (JNIEnv *, jobject obj)
{
// This seems weird but I think it is correct.
obj = unwrap (obj);
+
+ // NULL is ok here -- the JNI specification doesn't say so, but this
+ // is a no-op.
+ if (! obj)
+ return;
+
unmark_for_gc (obj, global_ref_table);
}
@@ -259,6 +265,11 @@ _Jv_JNI_DeleteLocalRef (JNIEnv *env, jobject obj)
// This seems weird but I think it is correct.
obj = unwrap (obj);
+ // NULL is ok here -- the JNI specification doesn't say so, but this
+ // is a no-op.
+ if (! obj)
+ return;
+
for (frame = env->locals; frame != NULL; frame = frame->next)
{
for (int i = 0; i < frame->size; ++i)
diff --git a/libjava/testsuite/libjava.jni/PR28178.c b/libjava/testsuite/libjava.jni/PR28178.c
new file mode 100644
index 00000000000..17e730a1c36
--- /dev/null
+++ b/libjava/testsuite/libjava.jni/PR28178.c
@@ -0,0 +1,10 @@
+#include <PR28178.h>
+
+void
+Java_PR28178_m (JNIEnv *env, jclass ignore)
+{
+ (*env)->DeleteLocalRef(env, NULL);
+ (*env)->DeleteGlobalRef(env, NULL);
+}
+
+
diff --git a/libjava/testsuite/libjava.jni/PR28178.java b/libjava/testsuite/libjava.jni/PR28178.java
new file mode 100644
index 00000000000..f8d7b904ccd
--- /dev/null
+++ b/libjava/testsuite/libjava.jni/PR28178.java
@@ -0,0 +1,15 @@
+// Regression test for PR 28178.
+
+public class PR28178
+{
+ static {
+ System.loadLibrary("PR28178");
+ }
+
+ public static native void m();
+
+ public static void main(String[] args)
+ {
+ m();
+ }
+}
diff --git a/libjava/testsuite/libjava.jni/PR28178.out b/libjava/testsuite/libjava.jni/PR28178.out
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/libjava/testsuite/libjava.jni/PR28178.out
OpenPOWER on IntegriCloud