aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/javascript.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/javascript/jsc/javascript.zig')
-rw-r--r--src/javascript/jsc/javascript.zig12
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;
}
}