From 960eacebcf6c51a2a71c6df8396cb8564e5dcdd0 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Tue, 9 Jun 2026 10:31:19 -0500 Subject: [PATCH] test(core): avoid Windows worker close race (#31532) --- packages/core/test/util/effect-flock.test.ts | 15 ++++++++++----- packages/core/test/util/flock.test.ts | 14 ++++++++------ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/core/test/util/effect-flock.test.ts b/packages/core/test/util/effect-flock.test.ts index a0a849ddb..0ec17c1e6 100644 --- a/packages/core/test/util/effect-flock.test.ts +++ b/packages/core/test/util/effect-flock.test.ts @@ -65,19 +65,25 @@ function spawnWorker(msg: Msg) { }) } -function stopWorker(proc: ReturnType) { - if (proc.exitCode !== null || proc.signalCode !== null) return Promise.resolve() +async function stopWorker(proc: ReturnType) { + if (proc.exitCode !== null || proc.signalCode !== null) return + + const closed = new Promise((resolve) => proc.once("close", () => resolve())) + if (process.platform !== "win32" || !proc.pid) { proc.kill() - return Promise.resolve() + await closed + return } - return new Promise((resolve) => { + + await new Promise((resolve) => { const killProc = spawn("taskkill", ["/pid", String(proc.pid), "/T", "/F"]) killProc.on("close", () => { proc.kill() resolve() }) }) + await closed } async function waitForFile(file: string, timeout = 3_000) { @@ -363,7 +369,6 @@ describe("util.effect-flock", () => { try { await waitForFile(ready, 5_000) await stopWorker(proc) - await new Promise((resolve) => proc.on("close", resolve)) // Backdate lock files so they're past STALE_MS (60s) const lockDir = lock(dir, "eflock:crash") diff --git a/packages/core/test/util/flock.test.ts b/packages/core/test/util/flock.test.ts index e1b647b64..53bfc1874 100644 --- a/packages/core/test/util/flock.test.ts +++ b/packages/core/test/util/flock.test.ts @@ -88,21 +88,25 @@ function spawnWorker(msg: Msg) { }) } -function stopWorker(proc: ReturnType) { - if (proc.exitCode !== null || proc.signalCode !== null) return Promise.resolve() +async function stopWorker(proc: ReturnType) { + if (proc.exitCode !== null || proc.signalCode !== null) return + + const closed = new Promise((resolve) => proc.once("close", () => resolve())) if (process.platform !== "win32" || !proc.pid) { proc.kill() - return Promise.resolve() + await closed + return } - return new Promise((resolve) => { + await new Promise((resolve) => { const killProc = spawn("taskkill", ["/pid", String(proc.pid), "/T", "/F"]) killProc.on("close", () => { proc.kill() resolve() }) }) + await closed } async function readJson(p: string): Promise { @@ -175,7 +179,6 @@ describe("util.flock", () => { expect(seen.every((x) => x === key)).toBe(true) } finally { await stopWorker(proc).catch(() => undefined) - await new Promise((resolve) => proc.on("close", resolve)) } }, 15_000) @@ -195,7 +198,6 @@ describe("util.flock", () => { await wait(ready, 5_000) await stopWorker(proc) - await new Promise((resolve) => proc.on("close", resolve)) let hit = false await Flock.withLock(