From fa55ca31e1f64ab1900fcdabce64e34c6ebf6091 Mon Sep 17 00:00:00 2001 From: Dylan Conway <35280289+dylan-conway@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:22:28 -0800 Subject: [PATCH] Fix occasional crash on `FilePoll` deinit (#17050) --- src/async/posix_event_loop.zig | 6 ++++-- src/async/windows_event_loop.zig | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/async/posix_event_loop.zig b/src/async/posix_event_loop.zig index 6ab59c66f7..7ee6c5d31d 100644 --- a/src/async/posix_event_loop.zig +++ b/src/async/posix_event_loop.zig @@ -592,8 +592,10 @@ pub const FilePoll = struct { poll.flags.insert(.ignore_updates); this.pending_free_tail = poll; - bun.assert(vm.after_event_loop_callback == null or vm.after_event_loop_callback == @as(?JSC.OpaqueCallback, @ptrCast(&processDeferredFrees))); - vm.after_event_loop_callback = @ptrCast(&processDeferredFrees); + + const callback = JSC.OpaqueWrap(Store, processDeferredFrees); + bun.assert(vm.after_event_loop_callback == null or vm.after_event_loop_callback == @as(?JSC.OpaqueCallback, callback)); + vm.after_event_loop_callback = callback; vm.after_event_loop_callback_ctx = this; } }; diff --git a/src/async/windows_event_loop.zig b/src/async/windows_event_loop.zig index 0943d1959b..6ac815a849 100644 --- a/src/async/windows_event_loop.zig +++ b/src/async/windows_event_loop.zig @@ -358,8 +358,10 @@ pub const FilePoll = struct { poll.flags.insert(.ignore_updates); this.pending_free_tail = poll; - bun.assert(vm.after_event_loop_callback == null or vm.after_event_loop_callback == @as(?JSC.OpaqueCallback, @ptrCast(&processDeferredFrees))); - vm.after_event_loop_callback = @ptrCast(&processDeferredFrees); + + const callback = JSC.OpaqueWrap(Store, processDeferredFrees); + bun.assert(vm.after_event_loop_callback == null or vm.after_event_loop_callback == @as(?JSC.OpaqueCallback, callback)); + vm.after_event_loop_callback = callback; vm.after_event_loop_callback_ctx = this; } };