diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2024-10-14 12:41:34 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-14 12:41:34 +0530 |
commit | d22195e7416e7923e2868e3f250abb457f115fc6 (patch) | |
tree | 8d2f73dee5a9f9954901f022fb172fd5f77d3dfa | |
parent | 7c3da2ec1c12c8c16b04d89b7aec5e04cd2ff3be (diff) |
fix(ext/napi): pass user context to napi_threadsafe_fn finalizers (#26229)
Fixes https://github.com/denoland/deno/issues/26228
-rw-r--r-- | cli/napi/node_api.rs | 2 | ||||
-rw-r--r-- | 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 2efb71c26..4497a4695 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 dabc96f83..a3a231cec 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( |