From 92f2646d9b6af57144c7aec42014ffeeb89091df Mon Sep 17 00:00:00 2001 From: Muki Kiboigo Date: Thu, 23 Jul 2026 15:31:41 -0700 Subject: [PATCH] remove cors req from single flight on transfer deinit --- src/network/CorsGate.zig | 4 ++++ src/network/HttpClient.zig | 12 ++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/network/CorsGate.zig b/src/network/CorsGate.zig index 22e56c0e4..42f5d573f 100644 --- a/src/network/CorsGate.zig +++ b/src/network/CorsGate.zig @@ -104,6 +104,10 @@ fn keyFor(arena: Allocator, transfer: *Transfer) ![]const u8 { ); } +pub fn remove(self: *CorsGate, transfer: *Transfer) void { + self.single_flight.remove(transfer); +} + pub fn check(self: *CorsGate, transfer: *Transfer) !Result { if (transfer.req.resource_type == .document) return .allowed; if (URL.isSameOrigin(transfer.req.url, transfer.req.cookie_origin)) return .allowed; diff --git a/src/network/HttpClient.zig b/src/network/HttpClient.zig index 996f03cba..3b0cedc1e 100644 --- a/src/network/HttpClient.zig +++ b/src/network/HttpClient.zig @@ -2138,10 +2138,14 @@ pub const Transfer = struct { self._dispatch_queued = false; } - // And for the robots gate: RobotsGate.pending holds a raw *Transfer - // while we're parked. - if (self.state == .parked and self.state.parked == .robots) { - self.client.robots.remove(self); + // And for the robots/cors gates: their single_flight.pending holds a raw + // *Transfer while we're parked. + if (self.state == .parked) { + switch (self.state.parked) { + .robots => self.client.robots.remove(self), + .cors => self.client.cors.remove(self), + .intercept_request, .intercept_auth => {}, + } } // A pending revalidation entry owns cache resources (possibly an