diff --git a/unity/Assets/core/upm/Runtime/Src/Default/JSType/GenericDelegate.cs b/unity/Assets/core/upm/Runtime/Src/Default/JSType/GenericDelegate.cs index c294d8d19c..9c57fd269e 100644 --- a/unity/Assets/core/upm/Runtime/Src/Default/JSType/GenericDelegate.cs +++ b/unity/Assets/core/upm/Runtime/Src/Default/JSType/GenericDelegate.cs @@ -366,11 +366,13 @@ private void CheckLiveness(bool shouldThrow = true) ~GenericDelegate() { if (nativeJsFuncPtr == IntPtr.Zero) return; - CheckLiveness(false); #if THREAD_SAFE lock(jsEnv) { #endif - jsEnv.DecFuncRef(nativeJsFuncPtr); + if (jsEnv.CheckLiveness(false)) + { + jsEnv.DecFuncRef(nativeJsFuncPtr); + } #if THREAD_SAFE } #endif diff --git a/unity/Assets/core/upm/Runtime/Src/Default/JsEnv.cs b/unity/Assets/core/upm/Runtime/Src/Default/JsEnv.cs index afe0827c29..00a8be4c73 100644 --- a/unity/Assets/core/upm/Runtime/Src/Default/JsEnv.cs +++ b/unity/Assets/core/upm/Runtime/Src/Default/JsEnv.cs @@ -822,12 +822,13 @@ protected virtual void Dispose(bool dispose) } } - internal void CheckLiveness() + internal bool CheckLiveness(bool shouldThrow = true) { - if (disposed) + if (disposed && shouldThrow) { throw new InvalidOperationException("JsEnv has been disposed!"); } + return !disposed; } Dictionary funcRefCount = new Dictionary(); diff --git a/unity/test/Src/Cases/AccessControlTest.cs b/unity/test/Src/Cases/AccessControlTest.cs index ac41090508..26708c777c 100644 --- a/unity/test/Src/Cases/AccessControlTest.cs +++ b/unity/test/Src/Cases/AccessControlTest.cs @@ -60,8 +60,8 @@ public AccessControlTest() [OneTimeTearDown] public void Cleanup() { - GC.Collect(); - GC.WaitForPendingFinalizers(); + //GC.Collect(); + //GC.WaitForPendingFinalizers(); DefaultDontBindingEnv.Dispose(); } #endif