From 279ecc9840f5a71023455f3596e63269c0b8a81d Mon Sep 17 00:00:00 2001 From: tromey Date: Tue, 29 Nov 2005 18:34:58 +0000 Subject: gcc/java: PR java/18278: * expr.c (build_jni_stub): Unwrap the return value. * java-tree.h (soft_unwrapjni_node): New define. (enum java_tree_index): Added JTI_SOFT_UNWRAPJNI_NODE. * decl.c (java_init_decl_processing): Initialize soft_unwrapjni_node. libjava: PR java/18278: * testsuite/libjava.jni/pr18278.out: New file. * testsuite/libjava.jni/pr18278.c: New file. * testsuite/libjava.jni/pr18278.java: New file. * include/jvm.h (_Jv_UnwrapJNIweakReference): Declare. * jni.cc (_Jv_UnwrapJNIweakReference): New function. (call): Unwrap return value if needed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@107676 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/jni.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'libjava/jni.cc') diff --git a/libjava/jni.cc b/libjava/jni.cc index 13bb12cf5dd..fd827065718 100644 --- a/libjava/jni.cc +++ b/libjava/jni.cc @@ -226,6 +226,12 @@ unwrap (T *obj) return reinterpret_cast (wr->get ()); } +jobject +_Jv_UnwrapJNIweakReference (jobject obj) +{ + return unwrap (obj); +} + static jobject JNICALL @@ -2304,6 +2310,13 @@ _Jv_JNIMethod::call (ffi_cif *, void *ret, ffi_raw *args, void *__this) ret, real_args); #endif + // We might need to unwrap a JNI weak reference here. + if (_this->jni_cif.rtype == &ffi_type_pointer) + { + _Jv_value *val = (_Jv_value *) ret; + val->object_value = unwrap (val->object_value); + } + if (sync != NULL) _Jv_MonitorExit (sync); -- cgit v1.2.1