diff --git a/src/browser/HttpClient.zig b/src/browser/HttpClient.zig index 8b78cf4c..7c7bdd5e 100644 --- a/src/browser/HttpClient.zig +++ b/src/browser/HttpClient.zig @@ -611,7 +611,15 @@ fn makeRequest(self: *Client, conn: *http.Connection, transfer: *Transfer) anyer return err; }; } - _ = try self.perform(0); + + // Start the request (and move along any other request). This used to call + // self.perform(0) but that can also execute callbacks. Normally, that + // wouldn't be so bad. But curl can synchronously fire callbacks for the + // request we JUST added, which we do not want (it results in incorrect + // execution). + self.performing = true; + defer self.performing = false; + _ = try self.handles.perform(); } pub const PerformStatus = enum { diff --git a/src/browser/tests/worker/worker.html b/src/browser/tests/worker/worker.html index 2740d7c0..8b15346a 100644 --- a/src/browser/tests/worker/worker.html +++ b/src/browser/tests/worker/worker.html @@ -337,3 +337,26 @@ }); } + +