diff options
Diffstat (limited to 'src/javascript/jsc/javascript.zig')
-rw-r--r-- | src/javascript/jsc/javascript.zig | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig index 24b59f91f..e4c09c3d2 100644 --- a/src/javascript/jsc/javascript.zig +++ b/src/javascript/jsc/javascript.zig @@ -1330,6 +1330,9 @@ pub const EventListenerMixin = struct { ctx: *CtxType, comptime onError: fn (ctx: *CtxType, err: anyerror, value: JSValue, request_ctx: *http.RequestContext) anyerror!void, ) !void { + defer { + if (request_context.has_called_done) request_context.arena.deinit(); + } var listeners = vm.event_listeners.get(EventType.fetch) orelse (return onError(ctx, error.NoListeners, JSValue.jsUndefined(), request_context) catch {}); if (listeners.items.len == 0) return onError(ctx, error.NoListeners, JSValue.jsUndefined(), request_context) catch {}; const FetchEventRejectionHandler = struct { @@ -1346,6 +1349,7 @@ pub const EventListenerMixin = struct { // Rely on JS finalizer var fetch_event = try vm.allocator.create(FetchEvent); + fetch_event.* = FetchEvent{ .request_context = request_context, .request = Request{ .request_context = request_context }, @@ -1366,7 +1370,7 @@ pub const EventListenerMixin = struct { if (fetch_event.rejected) return; if (promise.status(vm.global.vm()) == .Rejected) { - onError(ctx, error.JSError, promise.result(vm.global.vm()), request_context) catch {}; + onError(ctx, error.JSError, promise.result(vm.global.vm()), fetch_event.request_context) catch {}; return; } else { _ = promise.result(vm.global.vm()); @@ -1374,13 +1378,13 @@ pub const EventListenerMixin = struct { vm.global.vm().drainMicrotasks(); - if (request_context.has_called_done) { + if (fetch_event.request_context.has_called_done) { break; } } - if (!request_context.has_called_done) { - onError(ctx, error.FetchHandlerRespondWithNeverCalled, JSValue.jsUndefined(), request_context) catch {}; + if (!fetch_event.request_context.has_called_done) { + onError(ctx, error.FetchHandlerRespondWithNeverCalled, JSValue.jsUndefined(), fetch_event.request_context) catch {}; return; } } |