Compare commits

...

3 Commits

Author SHA1 Message Date
Dylan Conway
2505712ed9 Merge branch 'main' into dylan/napi-threadsafe-function-fixes 2025-11-01 23:02:13 -07:00
Dylan Conway
26ab7fe975 call finalizer 2025-11-01 22:52:48 -07:00
Dylan Conway
f23b9470e0 missing ctx 2025-11-01 22:03:01 -07:00
2 changed files with 14 additions and 11 deletions

View File

@@ -2926,6 +2926,11 @@ extern "C" bool NapiEnv__getAndClearPendingException(napi_env env, JSC::EncodedJ
return false;
}
extern "C" void NapiEnv__doFinalizer(napi_env env, napi_finalize finalize_cb, void* finalize_data, void* finalize_hint)
{
env->doFinalizer(finalize_cb, finalize_data, finalize_hint);
}
extern "C" void NapiEnv__ref(napi_env env)
{
env->ref();

View File

@@ -55,8 +55,13 @@ pub const NapiEnv = opaque {
return null;
}
pub fn doFinalizer(self: *NapiEnv, finalize_cb: napi_finalize, finalize_data: ?*anyopaque, finalize_hint: ?*anyopaque) void {
NapiEnv__doFinalizer(self, finalize_cb, finalize_data, finalize_hint);
}
extern fn NapiEnv__globalObject(*NapiEnv) *jsc.JSGlobalObject;
extern fn NapiEnv__getAndClearPendingException(*NapiEnv, *JSValue) bool;
extern fn NapiEnv__doFinalizer(*NapiEnv, napi_finalize, ?*anyopaque, ?*anyopaque) void;
extern fn napi_internal_get_version(*NapiEnv) u32;
extern fn NapiEnv__deref(*NapiEnv) void;
extern fn NapiEnv__ref(*NapiEnv) void;
@@ -1676,19 +1681,12 @@ pub const ThreadSafeFunction = struct {
}
pub fn deinit(this: *ThreadSafeFunction) void {
this.unref();
if (this.finalizer_fun) |fun| {
var finalizer: Finalizer = .{
.env = this.env,
.fun = fun,
.data = this.finalizer_data,
};
finalizer.enqueue();
} else {
this.env.deinit();
if (this.finalizer_fun != null) {
this.env.get().doFinalizer(this.finalizer_fun, this.finalizer_data, this.ctx);
}
this.unref();
this.env.deinit();
this.callback.deinit();
this.queue.deinit();
bun.destroy(this);