Merge pull request #1131 from lightpanda-io/microtask-queue-drain

drain micro task queue before reset ExecutionWorld and page
This commit is contained in:
Karl Seguin
2025-10-09 08:36:26 +08:00
committed by GitHub
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();