Skip to content

Commit 960eace

Browse files
authored
test(core): avoid Windows worker close race (anomalyco#31532)
1 parent b4a6419 commit 960eace

2 files changed

Lines changed: 18 additions & 11 deletions

File tree

packages/core/test/util/effect-flock.test.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,25 @@ function spawnWorker(msg: Msg) {
6565
})
6666
}
6767

68-
function stopWorker(proc: ReturnType<typeof spawnWorker>) {
69-
if (proc.exitCode !== null || proc.signalCode !== null) return Promise.resolve()
68+
async function stopWorker(proc: ReturnType<typeof spawnWorker>) {
69+
if (proc.exitCode !== null || proc.signalCode !== null) return
70+
71+
const closed = new Promise<void>((resolve) => proc.once("close", () => resolve()))
72+
7073
if (process.platform !== "win32" || !proc.pid) {
7174
proc.kill()
72-
return Promise.resolve()
75+
await closed
76+
return
7377
}
74-
return new Promise<void>((resolve) => {
78+
79+
await new Promise<void>((resolve) => {
7580
const killProc = spawn("taskkill", ["/pid", String(proc.pid), "/T", "/F"])
7681
killProc.on("close", () => {
7782
proc.kill()
7883
resolve()
7984
})
8085
})
86+
await closed
8187
}
8288

8389
async function waitForFile(file: string, timeout = 3_000) {
@@ -363,7 +369,6 @@ describe("util.effect-flock", () => {
363369
try {
364370
await waitForFile(ready, 5_000)
365371
await stopWorker(proc)
366-
await new Promise((resolve) => proc.on("close", resolve))
367372

368373
// Backdate lock files so they're past STALE_MS (60s)
369374
const lockDir = lock(dir, "eflock:crash")

packages/core/test/util/flock.test.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,21 +88,25 @@ function spawnWorker(msg: Msg) {
8888
})
8989
}
9090

91-
function stopWorker(proc: ReturnType<typeof spawnWorker>) {
92-
if (proc.exitCode !== null || proc.signalCode !== null) return Promise.resolve()
91+
async function stopWorker(proc: ReturnType<typeof spawnWorker>) {
92+
if (proc.exitCode !== null || proc.signalCode !== null) return
93+
94+
const closed = new Promise<void>((resolve) => proc.once("close", () => resolve()))
9395

9496
if (process.platform !== "win32" || !proc.pid) {
9597
proc.kill()
96-
return Promise.resolve()
98+
await closed
99+
return
97100
}
98101

99-
return new Promise<void>((resolve) => {
102+
await new Promise<void>((resolve) => {
100103
const killProc = spawn("taskkill", ["/pid", String(proc.pid), "/T", "/F"])
101104
killProc.on("close", () => {
102105
proc.kill()
103106
resolve()
104107
})
105108
})
109+
await closed
106110
}
107111

108112
async function readJson<T>(p: string): Promise<T> {
@@ -175,7 +179,6 @@ describe("util.flock", () => {
175179
expect(seen.every((x) => x === key)).toBe(true)
176180
} finally {
177181
await stopWorker(proc).catch(() => undefined)
178-
await new Promise((resolve) => proc.on("close", resolve))
179182
}
180183
}, 15_000)
181184

@@ -195,7 +198,6 @@ describe("util.flock", () => {
195198

196199
await wait(ready, 5_000)
197200
await stopWorker(proc)
198-
await new Promise((resolve) => proc.on("close", resolve))
199201

200202
let hit = false
201203
await Flock.withLock(

0 commit comments

Comments
 (0)