From 0481dbf158691609fc8e89af521e5e45f46da644 Mon Sep 17 00:00:00 2001 From: harshitsinghbhandari <24b4506@iitb.ac.in> Date: Sun, 19 Apr 2026 00:32:50 +0530 Subject: [PATCH] fix: harden startup lock handling (#1306) --- packages/cli/src/lib/running-state.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/lib/running-state.ts b/packages/cli/src/lib/running-state.ts index 797960e90..2aa6d68aa 100644 --- a/packages/cli/src/lib/running-state.ts +++ b/packages/cli/src/lib/running-state.ts @@ -37,7 +37,10 @@ function isProcessAlive(pid: number): boolean { try { process.kill(pid, 0); return true; - } catch { + } catch (error: unknown) { + if ((error as { code?: string }).code === "EPERM") { + return true; + } return false; } } @@ -94,13 +97,14 @@ async function acquireLock( const release = tryAcquire(lockFile); if (release) return release; + const owner = readLockMetadata(lockFile); + if (!owner || !isProcessAlive(owner.pid)) { + try { unlinkSync(lockFile); } catch { /* ignore */ } + const retryRelease = tryAcquire(lockFile); + if (retryRelease) return retryRelease; + } + if (Date.now() - start > timeoutMs) { - const owner = readLockMetadata(lockFile); - if (!owner || !isProcessAlive(owner.pid)) { - try { unlinkSync(lockFile); } catch { /* ignore */ } - const finalRelease = tryAcquire(lockFile); - if (finalRelease) return finalRelease; - } throw new Error(`Could not acquire ${resourceName}`); }