From 91f5988fe57efec4050ad9af6acbc9bbe2071d36 Mon Sep 17 00:00:00 2001 From: Nikolay Govorov Date: Wed, 29 Apr 2026 13:33:10 +0100 Subject: [PATCH] Fix segfault on Frame deinit --- src/browser/Session.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/browser/Session.zig b/src/browser/Session.zig index 17f2e221..651d97b6 100644 --- a/src/browser/Session.zig +++ b/src/browser/Session.zig @@ -133,9 +133,15 @@ pub fn createPage(self: *Session) !*Frame { } pub fn removePage(self: *Session) void { + lp.assert(self.page != null, "Session.removePage - page is null", .{}); + if (self.page.?.frame._script_manager.is_evaluating) { + // Reentrant teardown from a CDP message drained inside syncRequest; + // Session.deinit reclaims the page when the connection closes. + return; + } + // Inform CDP the frame is going to be removed, allowing other worlds to remove themselves before the main one self.notification.dispatch(.frame_remove, .{}); - lp.assert(self.page != null, "Session.removePage - page is null", .{}); self.page.?.deinit(false); self.page = null;