From d22195e7416e7923e2868e3f250abb457f115fc6 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Mon, 14 Oct 2024 12:41:34 +0530 Subject: [PATCH] fix(ext/napi): pass user context to napi_threadsafe_fn finalizers (#26229) Fixes https://github.com/denoland/deno/issues/26228 --- cli/napi/node_api.rs | 2 +- tests/napi/src/tsfn.rs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cli/napi/node_api.rs b/cli/napi/node_api.rs index 2efb71c267c93c..4497a4695aec87 100644 --- a/cli/napi/node_api.rs +++ b/cli/napi/node_api.rs @@ -692,7 +692,7 @@ impl Drop for TsFn { if let Some(finalizer) = self.thread_finalize_cb { unsafe { - (finalizer)(self.env as _, self.thread_finalize_data, ptr::null_mut()); + (finalizer)(self.env as _, self.thread_finalize_data, self.context); } } } diff --git a/tests/napi/src/tsfn.rs b/tests/napi/src/tsfn.rs index dabc96f835a8da..a3a231cec19c12 100644 --- a/tests/napi/src/tsfn.rs +++ b/tests/napi/src/tsfn.rs @@ -46,6 +46,7 @@ fn create_custom_gc(env: sys::napi_env) { "Create async resource string in napi_register_module_v1 napi_register_module_v1" ); let mut custom_gc_tsfn = ptr::null_mut(); + let context = Box::into_raw(Box::new(0)) as *mut c_void; check_status_or_panic!( unsafe { sys::napi_create_threadsafe_function( @@ -57,7 +58,7 @@ fn create_custom_gc(env: sys::napi_env) { 1, ptr::null_mut(), Some(custom_gc_finalize), - ptr::null_mut(), + context, Some(custom_gc), &mut custom_gc_tsfn, ) @@ -80,8 +81,9 @@ unsafe extern "C" fn empty( unsafe extern "C" fn custom_gc_finalize( _env: sys::napi_env, _finalize_data: *mut c_void, - _finalize_hint: *mut c_void, + finalize_hint: *mut c_void, ) { + let _ = Box::from_raw(finalize_hint as *mut i32); } extern "C" fn custom_gc(