From e492392f1b7716484a4681b707468fd191818d11 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 15 Sep 2023 00:09:12 -0700 Subject: [PATCH] PERF Only `finalizationRegistry.unregister` proxy if it is registered (#4138) --- src/core/pyproxy.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/pyproxy.ts b/src/core/pyproxy.ts index 4d67a690d2f..d6d7415b2e9 100644 --- a/src/core/pyproxy.ts +++ b/src/core/pyproxy.ts @@ -140,6 +140,7 @@ type PyProxyShared = { flags: number; promise: Promise | undefined; destroyed_msg: string | undefined; + gcRegistered: boolean; }; type PyProxyProps = { /** @@ -261,6 +262,7 @@ function pyproxy_new( flags, promise: undefined, destroyed_msg: undefined, + gcRegistered: false, }; Module._Py_IncRef(ptr); } @@ -293,6 +295,7 @@ Module.pyproxy_new = pyproxy_new; function gc_register_proxy(shared: PyProxyShared) { const shared_copy = Object.assign({}, shared); + shared.gcRegistered = true; Module.finalizationRegistry.register(shared, shared_copy, shared); } Module.gc_register_proxy = gc_register_proxy; @@ -462,7 +465,9 @@ Module.pyproxy_destroy = function ( // just in case! const ptr = shared.ptr; shared.ptr = 0; - Module.finalizationRegistry.unregister(shared); + if (shared.gcRegistered) { + Module.finalizationRegistry.unregister(shared); + } pyproxy_decref_cache(shared.cache); try {