aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Ciro Spaciari <ciro.spaciari@gmail.com> 2023-07-20 18:49:10 -0300
committerGravatar GitHub <noreply@github.com> 2023-07-20 14:49:10 -0700
commit99da0ae54b45c152eb26bd72b74765695d619bdc (patch)
treeb198e25a080587089bd04e3102485000186b4476 /src
parent4686f5395eabe88250af31014adbfe91949166db (diff)
downloadbun-99da0ae54b45c152eb26bd72b74765695d619bdc.tar.gz
bun-99da0ae54b45c152eb26bd72b74765695d619bdc.tar.zst
bun-99da0ae54b45c152eb26bd72b74765695d619bdc.zip
fix start delay on Worker (#3707)
* fix start delay on Worker * fmt * add delay test
Diffstat (limited to 'src')
-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) {