mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
node-api: make tsfn accept napi_finalize once more
The thread-safe function's finalizer is not called in conjunction with the garbage collection of a JS value. In fact, it keeps a strong reference to the JS function it is expected to call. Thus, it is safe to make calls that affect GC state from its body. PR-URL: https://github.com/nodejs/node/pull/51801 Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
This commit is contained in:
parent
4e109e5958
commit
f0e6acde2d
@ -1319,12 +1319,10 @@ napi_create_threadsafe_function(napi_env env,
|
||||
size_t max_queue_size,
|
||||
size_t initial_thread_count,
|
||||
void* thread_finalize_data,
|
||||
node_api_nogc_finalize nogc_thread_finalize_cb,
|
||||
napi_finalize thread_finalize_cb,
|
||||
void* context,
|
||||
napi_threadsafe_function_call_js call_js_cb,
|
||||
napi_threadsafe_function* result) {
|
||||
napi_finalize thread_finalize_cb =
|
||||
reinterpret_cast<napi_finalize>(nogc_thread_finalize_cb);
|
||||
CHECK_ENV_NOT_IN_GC(env);
|
||||
CHECK_ARG(env, async_resource_name);
|
||||
RETURN_STATUS_IF_FALSE(env, initial_thread_count > 0, napi_invalid_arg);
|
||||
|
@ -209,7 +209,7 @@ napi_create_threadsafe_function(napi_env env,
|
||||
size_t max_queue_size,
|
||||
size_t initial_thread_count,
|
||||
void* thread_finalize_data,
|
||||
node_api_nogc_finalize thread_finalize_cb,
|
||||
napi_finalize thread_finalize_cb,
|
||||
void* context,
|
||||
napi_threadsafe_function_call_js call_js_cb,
|
||||
napi_threadsafe_function* result);
|
||||
|
@ -16,18 +16,6 @@ static void ThreadSafeFunctionFinalize(napi_env env,
|
||||
NODE_API_CALL_RETURN_VOID(env, napi_delete_reference(env, js_func_ref));
|
||||
}
|
||||
|
||||
static void ThreadSafeFunctionNogcFinalize(node_api_nogc_env env,
|
||||
void* data,
|
||||
void* hint) {
|
||||
#ifdef NAPI_EXPERIMENTAL
|
||||
NODE_API_NOGC_CALL_RETURN_VOID(
|
||||
env,
|
||||
node_api_post_finalizer(env, ThreadSafeFunctionFinalize, data, hint));
|
||||
#else
|
||||
ThreadSafeFunctionFinalize(env, data, hint);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Testing calling into JavaScript
|
||||
static napi_value CallIntoModule(napi_env env, napi_callback_info info) {
|
||||
size_t argc = 4;
|
||||
@ -46,7 +34,7 @@ static napi_value CallIntoModule(napi_env env, napi_callback_info info) {
|
||||
0,
|
||||
1,
|
||||
finalize_func,
|
||||
ThreadSafeFunctionNogcFinalize,
|
||||
ThreadSafeFunctionFinalize,
|
||||
NULL,
|
||||
NULL,
|
||||
&tsfn));
|
||||
|
Loading…
Reference in New Issue
Block a user