Merge pull request #2135 from lightpanda-io/mo_cleanup

On Page cleanup, capture next linked list node _before_ releasing MO
This commit is contained in:
Karl Seguin
2026-04-13 22:49:59 +08:00
committed by GitHub
3 changed files with 6 additions and 6 deletions

View File

@@ -365,9 +365,10 @@ pub fn deinit(self: *Page, abort_http: bool) void {
}
{
var it: ?*std.DoublyLinkedList.Node = self._mutation_observers.first;
while (it) |node| : (it = node.next) {
const observer: *MutationObserver = @fieldParentPtr("node", node);
var node: ?*std.DoublyLinkedList.Node = self._mutation_observers.first;
while (node) |n| {
node = n.next; // capture before we potentially delete observer
const observer: *MutationObserver = @fieldParentPtr("node", n);
observer.releaseRef(session);
}
}

View File

@@ -71,7 +71,7 @@ pub const ObserverInit = struct {
};
pub fn init(callback: js.Function.Temp, options: ?ObserverInit, page: *Page) !*IntersectionObserver {
const arena = try page.getArena(.medium, "IntersectionObserver");
const arena = try page.getArena(.small, "IntersectionObserver");
errdefer page.releaseArena(arena);
const opts = options orelse ObserverInit{};

View File

@@ -76,9 +76,8 @@ pub const ObserveOptions = struct {
};
pub fn init(callback: js.Function.Temp, page: *Page) !*MutationObserver {
const arena = try page.getArena(.medium, "MutationObserver");
const arena = try page.getArena(.small, "MutationObserver");
errdefer page.releaseArena(arena);
const self = try arena.create(MutationObserver);
self.* = .{
._arena = arena,