Skip to content

Commit f9087d3

Browse files
committed
ignore errorCallback on shutdown
1 parent 7c825cb commit f9087d3

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

src/browser/ScriptManager.zig

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ pub fn init(browser: *Browser, page: *Page) ScriptManager {
103103
}
104104

105105
pub fn deinit(self: *ScriptManager) void {
106+
// necesasry to free any buffers scripts may be rerferencing
106107
self.reset();
108+
107109
self.buffer_pool.deinit();
108110
self.script_pool.deinit();
109111
self.imported_modules.deinit(self.allocator);
@@ -227,6 +229,10 @@ pub fn addFromElement(self: *ScriptManager, element: *parser.Element, comptime c
227229
},
228230
};
229231

232+
const list = self.scriptList(script);
233+
list.append(&script.node);
234+
errdefer list.remove(&script.node);
235+
230236
if (remote_url) |url| {
231237
var headers = try self.client.newHeaders();
232238
try page.requestCookie(.{}).headersForRequest(page.arena, url, &headers);
@@ -251,8 +257,6 @@ pub fn addFromElement(self: *ScriptManager, element: *parser.Element, comptime c
251257
.stack = page.js.stackTrace() catch "???",
252258
});
253259
}
254-
255-
self.scriptList(script).append(&script.node);
256260
}
257261

258262
fn scriptList(self: *ScriptManager, script: *const Script) *std.DoublyLinkedList {
@@ -447,8 +451,10 @@ fn evaluate(self: *ScriptManager) void {
447451
if (script.complete == false) {
448452
return;
449453
}
450-
defer script.deinit(true);
451-
defer _ = self.normal_scripts.popFirst();
454+
defer {
455+
_ = self.normal_scripts.popFirst();
456+
script.deinit(true);
457+
}
452458
script.eval(page);
453459
}
454460

@@ -468,8 +474,10 @@ fn evaluate(self: *ScriptManager) void {
468474
if (script.complete == false) {
469475
return;
470476
}
471-
defer script.deinit(true);
472-
defer _ = self.defer_scripts.popFirst();
477+
defer {
478+
_ = self.defer_scripts.popFirst();
479+
script.deinit(true);
480+
}
473481
script.eval(page);
474482
}
475483

@@ -640,8 +648,14 @@ const Script = struct {
640648
fn errorCallback(ctx: *anyopaque, err: anyerror) void {
641649
const self: *Script = @ptrCast(@alignCast(ctx));
642650
log.warn(.http, "script fetch error", .{ .req = self.url, .err = err });
651+
643652
const manager = self.manager;
644653
manager.scriptList(self).remove(&self.node);
654+
if (manager.shutdown) {
655+
self.deinit(true);
656+
return;
657+
}
658+
645659
if (self.mode == .import) {
646660
const entry = self.manager.imported_modules.getPtr(self.url).?;
647661
entry.* = error.Failed;

0 commit comments

Comments
 (0)