mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-06-11 17:46:32 -04:00
On Page cleanup, capture next linked list node _before_ releasing MO
Also, switch MO and IO to use a "small" arena, as they probably don't require too many allocations in most normal cases (just observing 1 or 2 things).
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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{};
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user