From 46e63607f1f9b87dd11f9d7bbb126b978fb5b992 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Sun, 23 May 2010 18:23:13 -0700 Subject: [PATCH] trim more stuff, dont delete refs for objects passed into methods overriden in the clr --- java/lang/Object.cs | 5 +++++ java/lang/Throwable.cs | 5 +++++ jni/IJvmProxy.cs | 2 ++ jni4net.n.androidmono.csproj | 2 -- utils/Convertor.J2C.strong.cs | 4 ++-- utils/RegistryRecord.cs | 7 +++++++ 6 files changed, 21 insertions(+), 4 deletions(-) diff --git a/java/lang/Object.cs b/java/lang/Object.cs index 8e2a6f9..2c97fa2 100644 --- a/java/lang/Object.cs +++ b/java/lang/Object.cs @@ -56,6 +56,11 @@ void IJvmProxy.Init(JNIEnv env, JniLocalHandle obj) env.DeleteLocalRef(obj); } + void IJvmProxy.InitNoDelete(JNIEnv env, JniLocalHandle obj) + { + jvmHandle = env.NewGlobalRef(obj); + } + void IJvmProxy.Copy(JNIEnv env, JniGlobalHandle obj) { jvmHandle = obj; diff --git a/java/lang/Throwable.cs b/java/lang/Throwable.cs index 883d463..4d2b80f 100644 --- a/java/lang/Throwable.cs +++ b/java/lang/Throwable.cs @@ -124,6 +124,11 @@ void IJvmProxy.Init(JNIEnv env, JniLocalHandle obj) jvmHandle = env.NewGlobalRef(obj); env.DeleteLocalRef(obj); } + + void IJvmProxy.InitNoDelete(JNIEnv env, JniLocalHandle obj) + { + jvmHandle = env.NewGlobalRef(obj); + } void IJvmProxy.Copy(JNIEnv env, JniGlobalHandle obj) { diff --git a/jni/IJvmProxy.cs b/jni/IJvmProxy.cs index 9831f03..4a505a0 100644 --- a/jni/IJvmProxy.cs +++ b/jni/IJvmProxy.cs @@ -33,6 +33,8 @@ public interface IJvmProxy : IObject void Init(JNIEnv env, JniLocalHandle obj); + void InitNoDelete(JNIEnv env, JniLocalHandle obj); + void Copy(JNIEnv env, JniGlobalHandle obj); } } \ No newline at end of file diff --git a/jni4net.n.androidmono.csproj b/jni4net.n.androidmono.csproj index b5ee678..ea18e05 100644 --- a/jni4net.n.androidmono.csproj +++ b/jni4net.n.androidmono.csproj @@ -138,7 +138,6 @@ - @@ -166,7 +165,6 @@ - diff --git a/utils/Convertor.J2C.strong.cs b/utils/Convertor.J2C.strong.cs index a21ba9c..2394ea9 100644 --- a/utils/Convertor.J2C.strong.cs +++ b/utils/Convertor.J2C.strong.cs @@ -52,7 +52,7 @@ public static object StrongJ2CpUntyped(IntPtr ptr) } Class clazz = env.GetObjectClass(obj); RegistryRecord record = Registry.GetJVMRecord(clazz); - return record.CreateCLRProxy(env, obj); + return record.CreateCLRProxyNoDelete(env, obj); } private class ConstructerHelper @@ -73,7 +73,7 @@ public static TRes StrongJ2CpTyped(IntPtr ptr) { var env = JNIEnv.ThreadEnv; var ret = ConstructerHelper.Create(env); - (ret as IJvmProxy).Init(env, ptr); + (ret as IJvmProxy).InitNoDelete(env, ptr); return ret; } diff --git a/utils/RegistryRecord.cs b/utils/RegistryRecord.cs index 75c806e..d6f03e8 100644 --- a/utils/RegistryRecord.cs +++ b/utils/RegistryRecord.cs @@ -70,6 +70,13 @@ internal IJvmProxy CreateCLRProxy(JNIEnv env, JniLocalHandle obj) proxy.Init(env, obj); return proxy; } + + internal IJvmProxy CreateCLRProxyNoDelete(JNIEnv env, JniLocalHandle obj) + { + IJvmProxy proxy = CLRConstructor.CreateProxy(env); + proxy.InitNoDelete(env, obj); + return proxy; + } internal IJvmProxy CopyCLRProxy(JNIEnv env, JniGlobalHandle obj) {