From dfa2a6b60b9bcb390a295ecd461814c19a5991aa Mon Sep 17 00:00:00 2001 From: Ben Grant Date: Thu, 3 Oct 2024 18:48:25 -0700 Subject: [PATCH] Fix tsfn finalizers --- src/bun.js/event_loop.zig | 2 +- src/napi/napi.zig | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/bun.js/event_loop.zig b/src/bun.js/event_loop.zig index 73642c1b5b..cc007414de 100644 --- a/src/bun.js/event_loop.zig +++ b/src/bun.js/event_loop.zig @@ -1258,8 +1258,8 @@ pub const EventLoop = struct { } pub fn tickImmediateTasks(this: *EventLoop, virtual_machine: *VirtualMachine) void { - JSC.napi.Finalizer.drain(&this.napi_finalizer_queue, this.global); _ = this.tickQueueWithCount(virtual_machine, "immediate_tasks"); + JSC.napi.Finalizer.drain(&this.napi_finalizer_queue, this.global); } fn tickConcurrent(this: *EventLoop) void { diff --git a/src/napi/napi.zig b/src/napi/napi.zig index 0abbea7876..b4fca9899d 100644 --- a/src/napi/napi.zig +++ b/src/napi/napi.zig @@ -1480,6 +1480,8 @@ pub const Finalizer = struct { pub fn drain(this: *Finalizer.Queue, env: napi_env) void { while (this.readItem()) |*finalizer| { + const handle_scope = NapiHandleScope.open(env, false); + defer if (handle_scope) |scope| scope.close(env); finalizer.fun.?(env, finalizer.data, finalizer.hint); } } @@ -1642,7 +1644,7 @@ pub const ThreadSafeFunction = struct { this.unref(); if (this.finalizer.fun) |fun| { - fun(this.event_loop.global, this.finalizer.data, this.ctx); + Finalizer.napi_enqueue_finalizer(fun, this.finalizer.data, this.ctx); } if (this.callback == .js) {