From d93550ff777d30623a94b57aaa318862007c7da4 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Thu, 19 Mar 2026 12:42:27 +0100 Subject: [PATCH] fix: don't leak event listener in playwright provider (#9910) --- packages/browser-playwright/src/playwright.ts | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/browser-playwright/src/playwright.ts b/packages/browser-playwright/src/playwright.ts index d838c0099..cb79ff27e 100644 --- a/packages/browser-playwright/src/playwright.ts +++ b/packages/browser-playwright/src/playwright.ts @@ -136,19 +136,21 @@ export class PlaywrightBrowserProvider implements BrowserProvider { } // make sure the traces are finished if the test hangs - process.on('SIGTERM', () => { - if (!this.browser) { - return - } - const promises = [] - for (const [trace, contextId] of this.pendingTraces.entries()) { - promises.push((() => { - const context = this.contexts.get(contextId) - return context?.tracing.stopChunk({ path: trace }) - })()) - } - return Promise.allSettled(promises) - }) + process.on('SIGTERM', this.onSIGTERM) + } + + private onSIGTERM = () => { + if (!this.browser) { + return + } + const promises = [] + for (const [trace, contextId] of this.pendingTraces.entries()) { + promises.push((() => { + const context = this.contexts.get(contextId) + return context?.tracing.stopChunk({ path: trace }) + })()) + } + return Promise.allSettled(promises) } private async openBrowser(openBrowserOptions: { parallel: boolean }) { @@ -545,6 +547,8 @@ export class PlaywrightBrowserProvider implements BrowserProvider { } async close(): Promise { + process.off('SIGTERM', this.onSIGTERM) + debug?.('[%s] closing provider', this.browserName) this.closing = true if (this.browserPromise) { -- 2.51.2