Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: gracefully handle process stdout/stderr EPIPE error #186717

Merged
merged 1 commit into from
Jun 30, 2023

Conversation

SimonSiefke
Copy link
Contributor

fixes #186714

This handles stdout/stderr EPIPE errors more gracefully:

The idea is to attach an error listener to process.stdout/process.stderr and only logging the error only to the bufferLogger and not to the console.

Before

// main.log
2023-06-30 07:47:13.051 [error] Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:160:15)
    at writeGeneric (node:internal/stream_base_commons:151:3)
    at Socket._writeGeneric (node:net:874:11)
    at Socket._write (node:net:886:8)
    at writeOrBuffer (node:internal/streams/writable:391:12)
    at _write (node:internal/streams/writable:332:10)
    at Writable.write (node:internal/streams/writable:336:10)
    at console.value (node:internal/console/constructor:299:16)
    at console.warn (node:internal/console/constructor:381:26)
    at s.send (node:electron/js2c/browser_init:2:86337)
    at _.send (node:electron/js2c/browser_init:2:71895)
    at bt.send (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3814)
    at bt.sendWhenReady (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3536)
    at at.sendToFocused (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:47075)
    at e.CodeApplication.v (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:54819)
    at E.a (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52424)
    at E.onUnexpectedError (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:249)
    at O (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:603)
    at process.<anonymous> (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52489)
    at process.emit (node:events:525:35)
    at process._fatalException (node:internal/process/execution:167:25)
2023-06-30 07:47:13.052 [error] [uncaught exception in main]: Error: write EPIPE
2023-06-30 07:47:13.052 [error] Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:160:15)
    at writeGeneric (node:internal/stream_base_commons:151:3)
    at Socket._writeGeneric (node:net:874:11)
    at Socket._write (node:net:886:8)
    at writeOrBuffer (node:internal/streams/writable:391:12)
    at _write (node:internal/streams/writable:332:10)
    at Writable.write (node:internal/streams/writable:336:10)
    at console.value (node:internal/console/constructor:299:16)
    at console.warn (node:internal/console/constructor:381:26)
    at s.send (node:electron/js2c/browser_init:2:86337)
    at _.send (node:electron/js2c/browser_init:2:71895)
    at bt.send (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3814)
    at bt.sendWhenReady (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3536)
    at at.sendToFocused (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:47075)
    at e.CodeApplication.v (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:54819)
    at E.a (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52424)
    at E.onUnexpectedError (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:249)
    at O (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:603)
    at process.<anonymous> (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52489)
    at process.emit (node:events:525:35)
    at process._fatalException (node:internal/process/execution:167:25)
2023-06-30 07:47:13.052 [error] [uncaught exception in main]: Error: write EPIPE
2023-06-30 07:47:13.052 [error] Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:160:15)
    at writeGeneric (node:internal/stream_base_commons:151:3)
    at Socket._writeGeneric (node:net:874:11)
    at Socket._write (node:net:886:8)
    at writeOrBuffer (node:internal/streams/writable:391:12)
    at _write (node:internal/streams/writable:332:10)
    at Writable.write (node:internal/streams/writable:336:10)
    at console.value (node:internal/console/constructor:299:16)
    at console.warn (node:internal/console/constructor:381:26)
    at s.send (node:electron/js2c/browser_init:2:86337)
    at _.send (node:electron/js2c/browser_init:2:71895)
    at bt.send (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3814)
    at bt.sendWhenReady (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3536)
    at at.sendToFocused (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:47075)
    at e.CodeApplication.v (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:54819)
    at E.a (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52424)
    at E.onUnexpectedError (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:249)
    at O (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:603)
    at process.<anonymous> (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52489)
    at process.emit (node:events:525:35)
    at process._fatalException (node:internal/process/execution:167:25)
2023-06-30 07:47:13.052 [error] [uncaught exception in main]: Error: write EPIPE
2023-06-30 07:47:13.052 [error] Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:160:15)
    at writeGeneric (node:internal/stream_base_commons:151:3)
    at Socket._writeGeneric (node:net:874:11)
    at Socket._write (node:net:886:8)
    at writeOrBuffer (node:internal/streams/writable:391:12)
    at _write (node:internal/streams/writable:332:10)
    at Writable.write (node:internal/streams/writable:336:10)
    at console.value (node:internal/console/constructor:299:16)
    at console.warn (node:internal/console/constructor:381:26)
    at s.send (node:electron/js2c/browser_init:2:86337)
    at _.send (node:electron/js2c/browser_init:2:71895)
    at bt.send (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3814)
    at bt.sendWhenReady (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3536)
    at at.sendToFocused (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:47075)
    at e.CodeApplication.v (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:54819)
    at E.a (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52424)
    at E.onUnexpectedError (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:249)
    at O (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:603)
    at process.<anonymous> (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52489)
    at process.emit (node:events:525:35)
    at process._fatalException (node:internal/process/execution:167:25)
2023-06-30 07:47:13.052 [error] [uncaught exception in main]: Error: write EPIPE
2023-06-30 07:47:13.052 [error] Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:160:15)
    at writeGeneric (node:internal/stream_base_commons:151:3)
    at Socket._writeGeneric (node:net:874:11)
    at Socket._write (node:net:886:8)
    at writeOrBuffer (node:internal/streams/writable:391:12)
    at _write (node:internal/streams/writable:332:10)
    at Writable.write (node:internal/streams/writable:336:10)
    at console.value (node:internal/console/constructor:299:16)
    at console.warn (node:internal/console/constructor:381:26)
    at s.send (node:electron/js2c/browser_init:2:86337)
    at _.send (node:electron/js2c/browser_init:2:71895)
    at bt.send (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3814)
    at bt.sendWhenReady (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:3536)
    at at.sendToFocused (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:47075)
    at e.CodeApplication.v (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:54819)
    at E.a (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52424)
    at E.onUnexpectedError (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:249)
    at O (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:7:603)
    at process.<anonymous> (.vscode-test/vscode-linux-x64-1.79.2/resources/app/out/vs/code/electron-main/main.js:89:52489)
    at process.emit (node:events:525:35)
    at process._fatalException (node:internal/process/execution:167:25)

After

// main.log
2023-06-30 11:26:22.886 [info] Extension host with pid 379203 exited with code: 0, signal: unknown.
2023-06-30 11:26:22.888 [error] stdout error in main: Error: write EPIPE

@connor4312
Copy link
Member

For consistency, I would prefer if we handled the error in uncaughtException like we do here:

if (!isSigPipeError(err)) {
onUnexpectedError(err);
}

@connor4312 connor4312 added the bug Issue identified by VS Code Team member as probable bug label Jun 30, 2023
@connor4312
Copy link
Member

Thanks for the PR!

@connor4312 connor4312 enabled auto-merge (squash) June 30, 2023 17:59
@connor4312 connor4312 merged commit 13c8667 into microsoft:main Jun 30, 2023
6 checks passed
@github-actions github-actions bot locked and limited conversation to collaborators Aug 14, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Issue identified by VS Code Team member as probable bug
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Error: write EPIPE endless loop
5 participants