X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fptyfwd.c;fp=src%2Fshared%2Fptyfwd.c;h=d44d70bf9f47046245d0f7230fd9b7a6b8519df4;hb=d60473c7ba32f2325a13f0357b23fd8e25609650;hp=72aa59efb7e30be87ce82e8accd8470cae6a20a2;hpb=210054d76cf4d294533aa09256d375e33b52569f;p=elogind.git diff --git a/src/shared/ptyfwd.c b/src/shared/ptyfwd.c index 72aa59efb..d44d70bf9 100644 --- a/src/shared/ptyfwd.c +++ b/src/shared/ptyfwd.c @@ -78,9 +78,9 @@ static int process_pty_loop(int master, sigset_t *mask, pid_t kill_pid, int sign assert(kill_pid == 0 || kill_pid > 1); assert(signo >= 0 && signo < _NSIG); - fd_nonblock(STDIN_FILENO, 1); - fd_nonblock(STDOUT_FILENO, 1); - fd_nonblock(master, 1); + fd_nonblock(STDIN_FILENO, true); + fd_nonblock(STDOUT_FILENO, true); + fd_nonblock(master, true); signal_fd = signalfd(-1, mask, SFD_NONBLOCK|SFD_CLOEXEC); if (signal_fd < 0) { @@ -376,6 +376,11 @@ int process_pty(int master, sigset_t *mask, pid_t kill_pid, int signo) { if (saved_stdin) tcsetattr(STDIN_FILENO, TCSANOW, &saved_stdin_attr); + /* STDIN/STDOUT should not be nonblocking normally, so let's + * unconditionally reset it */ + fd_nonblock(STDIN_FILENO, false); + fd_nonblock(STDOUT_FILENO, false); + return r; }