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);