From 0e000a97b49d03e56bcddf33e5e2e3200544ac3e Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Wed, 5 Jun 2024 00:21:42 -0700 Subject: [PATCH] more --- src/bun.js/bindings/BunProcess.cpp | 2 +- src/bun.js/web_worker.zig | 16 +++------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/bun.js/bindings/BunProcess.cpp b/src/bun.js/bindings/BunProcess.cpp index 4a334eee8a..6d7f827ad0 100644 --- a/src/bun.js/bindings/BunProcess.cpp +++ b/src/bun.js/bindings/BunProcess.cpp @@ -435,7 +435,7 @@ extern "C" int32_t Process__dispatchOnBeforeExit(Zig::GlobalObject* globalObject arguments.append(jsNumber(exitCode)); auto& emitter = process->wrapped(); const Identifier onBeforeExit = Identifier::fromString(globalObject->vm(), "beforeExit"_s); - if (emitter.hasActiveEventListeners(onBeforeExit)) { + if (emitter.hasEventListeners(onBeforeExit)) { emitter.emit(onBeforeExit, arguments); return 1; } diff --git a/src/bun.js/web_worker.zig b/src/bun.js/web_worker.zig index 33f3aabc69..1aacf272fd 100644 --- a/src/bun.js/web_worker.zig +++ b/src/bun.js/web_worker.zig @@ -379,31 +379,21 @@ pub const WebWorker = struct { var vm_to_deinit: ?*JSC.VirtualMachine = null; if (this.vm) |vm| { this.vm = null; - vm.beginShutdown(); - vm.onBeforeExit(); vm.onExit(); exit_code = vm.exit_handler.exit_code; globalObject = vm.global; vm_to_deinit = vm; + + // Prevent attempting to run GC after the VM has been deinitialized. + vm.gc_controller.disabled = true; } var arena = this.arena; WebWorker__dispatchExit(globalObject, cpp_worker, exit_code); if (vm_to_deinit) |vm| { - vm.gc_controller.disabled = true; - - // By this point, everything *should* be cleaned up. But, if there - // are any leftover tasks in the event loop that were already - // scheduled, let's go ahead and run them so that their cleanup code - // can run. - while (vm.event_loop_handle.?.isActive()) { - vm.event_loop_handle.?.tick(); - } - this.deinit(); - vm.deinit(); // NOTE: deinit here isn't implemented, so freeing workers will leak the vm. }