mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-01 06:24:41 +01:00
BrowserManager.close() detached every 'disconnected' listener before browser.close(). That also removed Playwright's internal listener that resolves close(), so every launched-mode close waited the full 5 s race timeout (measured 5,000 ms on origin/main and on this branch; raw Playwright closes in ~50 ms), and Playwright 1.62 has no Browser.process() for the SIGKILL fallback. The daemon's SIGINT shutdown therefore took over 5 s, which reddened the CLI lifecycle test under load (1 of 8 on main) and left browsers alive at shard cleanup. gstack now detaches only its own listeners: close takes ~50 ms. cleanupXvfb treated a terminated Xvfb child as alive until our own blocked event loop reaped it, so every close waited a full second then sent SIGKILL to a zombie. A zombie now counts as exited; the display test counts only running Xvfb processes.