From af609c7efe2a72e85602174a405763774365c617 Mon Sep 17 00:00:00 2001 From: vriesd Date: Thu, 8 Oct 2026 02:40:03 +0200 Subject: [PATCH 1/2] test(review): reproduce pipe closure before holder exit --- tests/review-diff.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/review-diff.test.ts b/tests/review-diff.test.ts index 116a3e5d..641a5e54 100644 --- a/tests/review-diff.test.ts +++ b/tests/review-diff.test.ts @@ -151,7 +151,7 @@ test.skipIf(process.platform === "win32").each(["stdout", "stderr"] as const)( const holder = join(fixture.directory, "holder.mjs"); await writeFile( holder, - `import {existsSync,writeFileSync} from "node:fs";writeFileSync(process.env.HOLDER_PID,String(process.pid));writeFileSync(process.env.READY,"ready");setTimeout(()=>{writeFileSync(process.env.MARKER,JSON.stringify(existsSync(process.env.OPERANDS+"/before")&&existsSync(process.env.OPERANDS+"/after")));process.exit(0);},250);`, + `import {closeSync,existsSync,writeFileSync} from "node:fs";writeFileSync(process.env.HOLDER_PID,String(process.pid));writeFileSync(process.env.READY,"ready");setTimeout(()=>{writeFileSync(process.env.MARKER,JSON.stringify(existsSync(process.env.OPERANDS+"/before")&&existsSync(process.env.OPERANDS+"/after")));closeSync(1);closeSync(2);setInterval(()=>{},1000);},250);`, ); const marker = join(fixture.directory, "marker"); const environment = { From 15ba94098ac13c9c19868d0460371435c37f2540 Mon Sep 17 00:00:00 2001 From: vriesd Date: Thu, 8 Oct 2026 02:40:47 +0200 Subject: [PATCH 2/2] test(review): assert pipe lifetime independently of holder PID --- tests/review-diff.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/review-diff.test.ts b/tests/review-diff.test.ts index 641a5e54..2c1a8775 100644 --- a/tests/review-diff.test.ts +++ b/tests/review-diff.test.ts @@ -133,7 +133,7 @@ test.skipIf(process.platform === "win32")( ); test.skipIf(process.platform === "win32").each(["stdout", "stderr"] as const)( - "%s overflow kills a TERM-ignoring child and waits for inherited pipes before cleanup", + "%s overflow kills a TERM-ignoring child and waits for pipe EOF while the holder remains alive", async (channel) => { const fixture = await fakeGit(` import {spawn} from "node:child_process"; @@ -173,7 +173,7 @@ test.skipIf(process.platform === "win32").each(["stdout", "stderr"] as const)( await expect(capture).rejects.toThrow(`${channel} exceeds its capacity`); expect( processGone(Number(await readFile(environment.HOLDER_PID, "utf8"))), - ).toBe(true); + ).toBe(false); }, );