drain micro task queue before reset ExecutionWorld and page

This commit is contained in:
Pierre Tachoire
2025-10-08 13:55:17 +02:00
parent a65aa9f312
commit 080b1d9a7c
2 changed files with 9 additions and 0 deletions

View File

@@ -231,6 +231,12 @@ pub fn createContext(self: *ExecutionWorld, page: *Page, enter: bool, global_cal
}
pub fn removeContext(self: *ExecutionWorld) void {
// Force running the micro task to drain the queue before reseting the
// context arena.
// Tasks in the queue are relying to the arena memory could be present in
// the queue. Running them later could lead to invalid memory accesses.
self.env.runMicrotasks();
self.context.?.deinit();
self.context = null;
_ = self.context_arena.reset(.{ .retain_with_limit = CONTEXT_ARENA_RETAIN });

View File

@@ -161,6 +161,9 @@ pub const Page = struct {
}
fn reset(self: *Page) void {
// Force running the micro task to drain the queue.
self.session.browser.env.runMicrotasks();
self.scheduler.reset();
self.http_client.abort();
self.script_manager.reset();