From fa0bba850f2c912161f22b4636297b5bcd578491 Mon Sep 17 00:00:00 2001 From: Theodore Ni <3806110+tjni@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:10:24 -0800 Subject: [PATCH] Convert worker OOM to a fatal error. --- packages/pyright-internal/src/pyright.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/pyright-internal/src/pyright.ts b/packages/pyright-internal/src/pyright.ts index a1d95dd96906..11bcac9d30c7 100644 --- a/packages/pyright-internal/src/pyright.ts +++ b/packages/pyright-internal/src/pyright.ts @@ -560,6 +560,7 @@ async function runMultiThreaded( output: ConsoleInterface ) { const workers: ChildProcess[] = []; + const workersShutdown = new Set(); const startTime = Date.now(); const treatWarningsAsErrors = !!args.warnings; const exitStatus = createDeferred(); @@ -627,6 +628,7 @@ async function runMultiThreaded( pendingAnalysisCount++; } else { // Kill the worker since there's nothing left to do. + workersShutdown.add(worker); worker.kill(); if (pendingAnalysisCount === 0) { @@ -736,6 +738,15 @@ async function runMultiThreaded( exitStatus.resolve(ExitStatus.FatalError); }); + worker.on('exit', (code, signal) => { + if (workersShutdown.has(worker)) { + return; + } + + output.error(`Worker process exited unexpectedly: exit code=${code}, signal=${signal}`); + exitStatus.resolve(ExitStatus.FatalError); + }); + sendMessageToWorker(worker, 'setOptions', options); workers.push(worker);