diff --git a/src/bun.js/api/server.zig b/src/bun.js/api/server.zig index ba530aa205..edd84015e2 100644 --- a/src/bun.js/api/server.zig +++ b/src/bun.js/api/server.zig @@ -3285,8 +3285,10 @@ fn NewRequestContext(comptime ssl_enabled: bool, comptime debug_mode: bool, comp this.request_body_buf = .{}; if (old == .Locked) { - var vm = this.server.vm; - defer vm.drainMicrotasks(); + var loop = this.server.vm.eventLoop(); + loop.enter(); + defer loop.exit(); + old.resolve(&body.value, this.server.globalThis); } return; diff --git a/src/bun.js/event_loop.zig b/src/bun.js/event_loop.zig index 09b9877f25..8f27c29293 100644 --- a/src/bun.js/event_loop.zig +++ b/src/bun.js/event_loop.zig @@ -810,6 +810,7 @@ pub const EventLoop = struct { } pub fn drainMicrotasks(this: *EventLoop) void { + this.virtual_machine.jsc.releaseWeakRefs(); this.drainMicrotasksWithGlobal(this.global); } diff --git a/src/bun.js/webcore/blob.zig b/src/bun.js/webcore/blob.zig index 55a5b4771e..c4cf8f4137 100644 --- a/src/bun.js/webcore/blob.zig +++ b/src/bun.js/webcore/blob.zig @@ -2026,7 +2026,8 @@ pub const Blob = struct { const promise = this.promise.swap(); const err_instance = err.toSystemError().toErrorInstance(globalThis); var event_loop = this.event_loop; - defer event_loop.drainMicrotasks(); + event_loop.enter(); + defer event_loop.exit(); this.deinit(); promise.reject(globalThis, err_instance); } diff --git a/src/bun.js/webcore/blob/WriteFile.zig b/src/bun.js/webcore/blob/WriteFile.zig index 337eac6a9b..a8d4890dba 100644 --- a/src/bun.js/webcore/blob/WriteFile.zig +++ b/src/bun.js/webcore/blob/WriteFile.zig @@ -544,7 +544,8 @@ pub const WriteFileWindows = struct { pub fn onFinish(container: *WriteFileWindows) void { container.loop().unrefConcurrently(); var event_loop = container.event_loop; - defer event_loop.drainMicrotasks(); + event_loop.enter(); + defer event_loop.exit(); // We don't need to enqueue task since this is already in a task. container.runFromJSThread();