Skip to content

Commit 57f0879

Browse files
committed
[unity]fix: il2cpp 下 JsEnv dispose 后 JSObject.Get 访问野指针崩溃
JsEnv dispose 后 native 侧 JsEnvPrivate 已释放,此时(如 GC finalizer 线程或残留回调里)调用 JSObject.Get 会继续访问已释放的 native 内存导致崩溃。与析构函数的处置保持一致:加锁并在 JsEnv 已 dispose 时抛出 ObjectDisposedException。
1 parent 265837b commit 57f0879

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

  • unity/Assets/core/upm/Runtime/Src/IL2Cpp/JSType

‎unity/Assets/core/upm/Runtime/Src/IL2Cpp/JSType/JSObject.cs‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,17 @@ object GetJSObjectValue(IntPtr apis, string key, Type resultType)
2929

3030
public T Get<T>(string key)
3131
{
32-
return (T)GetJSObjectValue(apis, key, typeof(T));
32+
lock (jsEnv)
33+
{
34+
if (!jsEnv.disposed)
35+
{
36+
return (T)GetJSObjectValue(apis, key, typeof(T));
37+
}
38+
else
39+
{
40+
throw new ObjectDisposedException("JsEnv");
41+
}
42+
}
3343
}
3444

3545
~JSObject()

0 commit comments

Comments
 (0)