diff --git a/src/Java.Interop/Java.Interop/JniEnvironment.cs b/src/Java.Interop/Java.Interop/JniEnvironment.cs index 951100185..5512e9265 100644 --- a/src/Java.Interop/Java.Interop/JniEnvironment.cs +++ b/src/Java.Interop/Java.Interop/JniEnvironment.cs @@ -118,6 +118,10 @@ internal List LocalReferences { get {return lrefs ?? (lrefs = new List ());} } + internal static bool HasCurrent { + get {return current != null;} + } + public static JniEnvironment Current { get { return current ?? RootEnvironment; diff --git a/src/Java.Interop/Java.Interop/JniFieldID.cs b/src/Java.Interop/Java.Interop/JniFieldID.cs index b94f26839..746f2ca3a 100644 --- a/src/Java.Interop/Java.Interop/JniFieldID.cs +++ b/src/Java.Interop/Java.Interop/JniFieldID.cs @@ -13,7 +13,8 @@ internal JniFieldID () protected override bool ReleaseHandle () { - JniEnvironment.Current.JavaVM.UnTrack (this); + if (JniEnvironment.HasCurrent) + JniEnvironment.Current.JavaVM.UnTrack (this); return true; } diff --git a/src/Java.Interop/Java.Interop/JniGlobalReference.cs b/src/Java.Interop/Java.Interop/JniGlobalReference.cs index 86644e01f..e99c29d53 100644 --- a/src/Java.Interop/Java.Interop/JniGlobalReference.cs +++ b/src/Java.Interop/Java.Interop/JniGlobalReference.cs @@ -8,7 +8,8 @@ namespace Java.Interop public class JniGlobalReference : JniReferenceSafeHandle { protected override bool ReleaseHandle () { - JniEnvironment.Current.JavaVM.JniHandleManager.DeleteGlobalReference (handle); + if (JniEnvironment.HasCurrent) + JniEnvironment.Current.JavaVM.JniHandleManager.DeleteGlobalReference (handle); return true; } } diff --git a/src/Java.Interop/Java.Interop/JniMethodID.cs b/src/Java.Interop/Java.Interop/JniMethodID.cs index 68223ff18..0bb97f0f2 100644 --- a/src/Java.Interop/Java.Interop/JniMethodID.cs +++ b/src/Java.Interop/Java.Interop/JniMethodID.cs @@ -13,7 +13,8 @@ internal JniMethodID () protected override bool ReleaseHandle () { - JniEnvironment.Current.JavaVM.UnTrack (this); + if (JniEnvironment.HasCurrent) + JniEnvironment.Current.JavaVM.UnTrack (this); return true; } diff --git a/src/Java.Interop/Java.Interop/JniWeakGlobalReference.cs b/src/Java.Interop/Java.Interop/JniWeakGlobalReference.cs index ef3c01b46..957c662fc 100644 --- a/src/Java.Interop/Java.Interop/JniWeakGlobalReference.cs +++ b/src/Java.Interop/Java.Interop/JniWeakGlobalReference.cs @@ -8,7 +8,8 @@ namespace Java.Interop public class JniWeakGlobalReference : JniReferenceSafeHandle { protected override bool ReleaseHandle () { - JniEnvironment.Current.JavaVM.JniHandleManager.DeleteWeakGlobalReference (handle); + if (JniEnvironment.HasCurrent) + JniEnvironment.Current.JavaVM.JniHandleManager.DeleteWeakGlobalReference (handle); return true; } }