aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js')
-rw-r--r--src/bun.js/javascript.zig10
-rw-r--r--src/bun.js/web_worker.zig6
2 files changed, 14 insertions, 2 deletions
diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig
index a198259ed..94d82c496 100644
--- a/src/bun.js/javascript.zig
+++ b/src/bun.js/javascript.zig
@@ -1869,6 +1869,16 @@ pub const VirtualMachine = struct {
return promise;
}
+ // worker dont has bun_watcher and also we dont wanna call autoTick before dispatchOnline
+ pub fn loadEntryPointForWebWorker(this: *VirtualMachine, entry_path: string) anyerror!*JSInternalPromise {
+ var promise = try this.reloadEntryPoint(entry_path);
+ this.eventLoop().performGC();
+ this.waitForPromise(JSC.AnyPromise{
+ .Internal = promise,
+ });
+ return this.pending_internal_promise;
+ }
+
pub fn loadEntryPoint(this: *VirtualMachine, entry_path: string) anyerror!*JSInternalPromise {
var promise = try this.reloadEntryPoint(entry_path);
diff --git a/src/bun.js/web_worker.zig b/src/bun.js/web_worker.zig
index 7bbd73e27..504b0adeb 100644
--- a/src/bun.js/web_worker.zig
+++ b/src/bun.js/web_worker.zig
@@ -266,7 +266,7 @@ pub const WebWorker = struct {
std.debug.assert(this.status == .start);
this.setStatus(.starting);
- var promise = vm.loadEntryPoint(this.specifier) catch {
+ var promise = vm.loadEntryPointForWebWorker(this.specifier) catch {
this.flushLogs();
this.onTerminate();
return;
@@ -298,9 +298,11 @@ pub const WebWorker = struct {
vm.global.vm().releaseWeakRefs();
_ = vm.arena.gc(false);
_ = vm.global.vm().runGC(false);
- vm.tick();
}
+ // always doing a first tick so we call CppTask without delay after dispatchOnline
+ vm.tick();
+
{
while (true) {
while (vm.eventLoop().tasks.count > 0 or vm.active_tasks > 0 or vm.uws_event_loop.?.active > 0) {