mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-02-04 06:23:45 +00:00
use inspector.resetContextGroup during cdp deinit
Ensure the inspector is correctly reset from context before deinit it. It fixes the contextCollected crash in a better way.
This commit is contained in:
@@ -253,15 +253,8 @@ fn reset(self: *Page, comptime initializing: bool) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (comptime initializing == false) {
|
if (comptime initializing == false) {
|
||||||
// Removing the context triggers the linked inspector.
|
|
||||||
// It seems to append a collect task to the message loop.
|
|
||||||
self._session.executor.removeContext();
|
self._session.executor.removeContext();
|
||||||
|
|
||||||
// We force running the message loop after removing the context b/c we
|
|
||||||
// will force a GC run just after. If we remove this part, the task
|
|
||||||
// will run after the GC and we will use memory after free.
|
|
||||||
self._session.browser.runMessageLoop();
|
|
||||||
|
|
||||||
// We force a garbage collection between page navigations to keep v8
|
// We force a garbage collection between page navigations to keep v8
|
||||||
// memory usage as low as possible.
|
// memory usage as low as possible.
|
||||||
self._session.browser.env.memoryPressureNotification(.moderate);
|
self._session.browser.env.memoryPressureNotification(.moderate);
|
||||||
|
|||||||
@@ -151,6 +151,18 @@ pub fn contextCreated(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn contextDestroyed(self: *Inspector, local: *const js.Local) void {
|
||||||
|
v8.v8_inspector__Inspector__ContextDestroyed(self.handle, local.handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn resetContextGroup(self: *const Inspector) void {
|
||||||
|
var hs: v8.HandleScope = undefined;
|
||||||
|
v8.v8__HandleScope__CONSTRUCT(&hs, self.isolate);
|
||||||
|
defer v8.v8__HandleScope__DESTRUCT(&hs);
|
||||||
|
|
||||||
|
v8.v8_inspector__Inspector__ResetContextGroup(self.handle, CONTEXT_GROUP_ID);
|
||||||
|
}
|
||||||
|
|
||||||
// Retrieves the RemoteObject for a given value.
|
// Retrieves the RemoteObject for a given value.
|
||||||
// The value is loaded through the ExecutionWorld's mapZigInstanceToJs function,
|
// The value is loaded through the ExecutionWorld's mapZigInstanceToJs function,
|
||||||
// just like a method return value. Therefore, if we've mapped this
|
// just like a method return value. Therefore, if we've mapped this
|
||||||
|
|||||||
@@ -424,6 +424,11 @@ pub fn BrowserContext(comptime CDP_T: type) type {
|
|||||||
// in progress before deinit.
|
// in progress before deinit.
|
||||||
self.cdp.browser.env.runMicrotasks();
|
self.cdp.browser.env.runMicrotasks();
|
||||||
|
|
||||||
|
// resetContextGroup detach the inspector from all contexts.
|
||||||
|
// It append async tasks, so we make sure we run the message loop
|
||||||
|
// before deinit it.
|
||||||
|
self.inspector.resetContextGroup();
|
||||||
|
self.session.browser.runMessageLoop();
|
||||||
self.inspector.deinit();
|
self.inspector.deinit();
|
||||||
|
|
||||||
// abort all intercepted requests before closing the sesion/page
|
// abort all intercepted requests before closing the sesion/page
|
||||||
|
|||||||
Reference in New Issue
Block a user