diff --git a/src/js_native_api_v8.cc b/src/js_native_api_v8.cc index b8455eb3a69b3e..dceb55278aea20 100644 --- a/src/js_native_api_v8.cc +++ b/src/js_native_api_v8.cc @@ -242,6 +242,8 @@ class RefBase : protected Finalizer, RefTracker { static inline void Delete(RefBase* reference) { reference->Unlink(); if ((reference->RefCount() != 0) || + (reference->RefCount() == 0 && + reference->_finalize_callback == nullptr) || (reference->_delete_self) || (reference->_finalize_ran)) { delete reference; diff --git a/test/node-api/test_worker_terminate_finalization/test.js b/test/node-api/test_worker_terminate_finalization/test.js index d58324d5e5f696..7240520080e66c 100644 --- a/test/node-api/test_worker_terminate_finalization/test.js +++ b/test/node-api/test_worker_terminate_finalization/test.js @@ -1,10 +1,6 @@ 'use strict'; const common = require('../../common'); -// TODO(addaleax): Run this test once it stops failing under ASAN/valgrind. -// Refs: https://github.com/nodejs/node/issues/34731 -common.skip('Reference management in N-API leaks memory'); - const { Worker, isMainThread } = require('worker_threads'); if (isMainThread) { diff --git a/test/node-api/test_worker_terminate_finalization/test_worker_terminate_finalization.c b/test/node-api/test_worker_terminate_finalization/test_worker_terminate_finalization.c index bb23830ecd2731..4dd82cdc8d2006 100644 --- a/test/node-api/test_worker_terminate_finalization/test_worker_terminate_finalization.c +++ b/test/node-api/test_worker_terminate_finalization/test_worker_terminate_finalization.c @@ -9,8 +9,7 @@ int wrappedNativeData; napi_ref ref; void WrapFinalizer(napi_env env, void* data, void* hint) { - uint32_t count; - NAPI_CALL_RETURN_VOID(env, napi_reference_unref(env, ref, &count)); + NAPI_CALL_RETURN_VOID(env, napi_reference_unref(env, ref, NULL)); NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, ref)); }