From 66e3cb463e0c25107a247e551f54a960de4cdb63 Mon Sep 17 00:00:00 2001 From: Kaustav Mishra Date: Sat, 4 Apr 2026 00:26:43 +0530 Subject: [PATCH] fix: close old pages before clearing map during handoff MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When handing off from headless to headed mode, old pages were removed from the pages map without being explicitly closed. This left Playwright Page objects dangling with their event listeners and resources intact, causing a resource leak. The pattern for cleanup should match closeAllPages() and recreateContext(), which both explicitly close pages before clearing the map: for (const page of this.pages.values()) { await page.close().catch(() => {}); } this.pages.clear(); This ensures Playwright resources are properly released when switching to headed mode, preventing memory accumulation on repeated handoff/resume cycles. Fixes resource leak in interactive handoff workflow (headless → headed mode). --- browse/src/browser-manager.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/browse/src/browser-manager.ts b/browse/src/browser-manager.ts index f4ade9e1e..38dce44ab 100644 --- a/browse/src/browser-manager.ts +++ b/browse/src/browser-manager.ts @@ -867,6 +867,11 @@ export class BrowserManager { // Swap to new browser/context before restoreState (it uses this.context) const oldBrowser = this.browser; + // Close old pages before clearing the map to release resources + for (const page of this.pages.values()) { + await page.close().catch(() => {}); + } + this.context = newContext; this.browser = newContext.browser(); this.pages.clear();