src: skip tcsetattr on exit when backgrounded#62946
Open
maruthang wants to merge 1 commit intonodejs:mainfrom
Open
src: skip tcsetattr on exit when backgrounded#62946maruthang wants to merge 1 commit intonodejs:mainfrom
maruthang wants to merge 1 commit intonodejs:mainfrom
Conversation
ResetStdio() unconditionally restored saved termios state on every tty stdio fd at exit. When Node is not the foreground process group for that terminal (`node script.js &`, ctrl-Z + bg, or a later pipeline stage taking the foreground), this clobbers the foreground pgrp's termios - breaking shell readline, leaving terminals in raw mode after the foreground pager exits, etc. Guard the tcsetattr call with `tcgetpgrp(fd) == getpgrp()` so we only restore when we are still the foreground pgrp for that terminal. The existing SIGTTOU defensive block is preserved to cover the unavoidable race where the foreground pgrp changes between the check and the call. Fixes: nodejs#35536 Refs: nodejs#42433 Signed-off-by: Maruthan G <maruthangt@gmail.com>
Collaborator
|
Review requested:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ResetStdio() unconditionally restored saved termios state on every
tty stdio fd at exit. When Node is not the foreground process
group for that terminal (
node script.js &, ctrl-Z + bg, or alater pipeline stage taking the foreground), this clobbers the
foreground pgrp's termios - breaking shell readline, leaving
terminals in raw mode after the foreground pager exits, etc.
Guard the tcsetattr call with
tcgetpgrp(fd) == getpgrp()so weonly restore when we are still the foreground pgrp for that
terminal. The existing SIGTTOU defensive block is preserved to
cover the unavoidable race where the foreground pgrp changes
between the check and the call.
Fixes: #35536
Refs: #42433