mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 07:03:29 +00:00
drain micro task queue before reset ExecutionWorld and page
This commit is contained in:
@@ -231,6 +231,12 @@ pub fn createContext(self: *ExecutionWorld, page: *Page, enter: bool, global_cal
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn removeContext(self: *ExecutionWorld) void {
|
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.?.deinit();
|
||||||
self.context = null;
|
self.context = null;
|
||||||
_ = self.context_arena.reset(.{ .retain_with_limit = CONTEXT_ARENA_RETAIN });
|
_ = self.context_arena.reset(.{ .retain_with_limit = CONTEXT_ARENA_RETAIN });
|
||||||
|
|||||||
@@ -161,6 +161,9 @@ pub const Page = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn reset(self: *Page) void {
|
fn reset(self: *Page) void {
|
||||||
|
// Force running the micro task to drain the queue.
|
||||||
|
self.session.browser.env.runMicrotasks();
|
||||||
|
|
||||||
self.scheduler.reset();
|
self.scheduler.reset();
|
||||||
self.http_client.abort();
|
self.http_client.abort();
|
||||||
self.script_manager.reset();
|
self.script_manager.reset();
|
||||||
|
|||||||
Reference in New Issue
Block a user