diff --git a/packages/node/src/integrations/contextlines.ts b/packages/node/src/integrations/contextlines.ts index dd9929dc29a6..eb6d513d8954 100644 --- a/packages/node/src/integrations/contextlines.ts +++ b/packages/node/src/integrations/contextlines.ts @@ -141,6 +141,11 @@ function getContextLinesFromFile(path: string, ranges: ReadlineRange[], output: const lineReaded = createInterface({ input: stream, }); + + function destroyStreamAndResolve(): void { + stream.destroy(); + resolve(); + } // Init at zero and increment at the start of the loop because lines are 1 indexed. let lineNumber = 0; @@ -148,12 +153,11 @@ function getContextLinesFromFile(path: string, ranges: ReadlineRange[], output: const range = ranges[currentRangeIndex]; if (range === undefined) { // We should never reach this point, but if we do, we should resolve the promise to prevent it from hanging. - resolve(); + destroyStreamAndResolve(); return; } let rangeStart = range[0]; let rangeEnd = range[1]; - // We use this inside Promise.all, so we need to resolve the promise even if there is an error // to prevent Promise.all from short circuiting the rest. function onStreamError(e: Error): void { @@ -162,14 +166,14 @@ function getContextLinesFromFile(path: string, ranges: ReadlineRange[], output: DEBUG_BUILD && logger.error(`Failed to read file: ${path}. Error: ${e}`); lineReaded.close(); lineReaded.removeAllListeners(); - resolve(); + destroyStreamAndResolve(); } // We need to handle the error event to prevent the process from crashing in < Node 16 // https://github.com/nodejs/node/pull/31603 stream.on('error', onStreamError); lineReaded.on('error', onStreamError); - lineReaded.on('close', resolve); + lineReaded.on('close', destroyStreamAndResolve); lineReaded.on('line', line => { lineNumber++;