Call Inpsector::ContextDestroyed

This seems to solve some potential use-after-free issues. By informing the
Inspector that the context is gone, it seems to effectively ensure that no more
messages are sent from the inspector for things related to the context.
This commit is contained in:
Karl Seguin
2026-02-04 16:24:48 +08:00
parent 3c635532c4
commit fbd554a15f
2 changed files with 12 additions and 3 deletions

View File

@@ -264,8 +264,17 @@ pub fn destroyContext(self: *Env, context: *Context) void {
@panic("Tried to remove unknown context"); @panic("Tried to remove unknown context");
} }
} }
const isolate = self.isolate;
if (self.inspector) |inspector| {
var hs: js.HandleScope = undefined;
hs.init(isolate);
defer hs.deinit();
inspector.contextDestroyed(@ptrCast(v8.v8__Global__Get(&context.handle, isolate.handle)));
}
context.deinit(); context.deinit();
self.isolate.notifyContextDisposed(); isolate.notifyContextDisposed();
} }
pub fn runMicrotasks(self: *const Env) void { pub fn runMicrotasks(self: *const Env) void {

View File

@@ -128,8 +128,8 @@ pub fn contextCreated(
} }
} }
pub fn contextDestroyed(self: *Inspector, local: *const js.Local) void { pub fn contextDestroyed(self: *Inspector, context: *const v8.Context) void {
v8.v8_inspector__Inspector__ContextDestroyed(self.handle, local.handle); v8.v8_inspector__Inspector__ContextDestroyed(self.handle, context);
} }
pub fn resetContextGroup(self: *const Inspector) void { pub fn resetContextGroup(self: *const Inspector) void {