From 6b21fccb6985f31609dadbe31e9c8b8471bacab7 Mon Sep 17 00:00:00 2001 From: Sebastien Tardif Date: Sat, 9 May 2026 23:10:31 -0700 Subject: [PATCH] fix(server): close WriteStreams on createTempFiles failure --- .../dispatchers/browserContextDispatcher.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts b/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts index 3170e5e7d0c11..38ddae5ce3b8b 100644 --- a/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts @@ -230,15 +230,25 @@ export class BrowserContextDispatcher extends Dispatcher { + + const streams: fs.WriteStream[] = []; + try { + const writableStreams = await Promise.all(params.items.map(async item => { const itemPath = throwingResolveWithinRoot(tempDirWithRootName, item.name); await progress.race(fs.promises.mkdir(path.dirname(itemPath), { recursive: true })); const file = fs.createWriteStream(itemPath); + streams.push(file); return new WritableStreamDispatcher(this, file, item.lastModifiedMs); - })) - }; + })); + return { + rootDir: params.rootDirName ? new WritableStreamDispatcher(this, tempDirWithRootName) : undefined, + writableStreams, + }; + } catch (e) { + for (const stream of streams) + stream.destroy(); + throw e; + } } async exposeBinding(params: channels.BrowserContextExposeBindingParams, progress: Progress): Promise {