From: Damien Miller Date: Sat, 22 Jan 2022 00:38:21 +0000 (+1100) Subject: restore tty force-read hack X-Git-Tag: V_8_9_P1~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e204b34337a965feb439826157c191919fd9ecf8;p=thirdparty%2Fopenssh-portable.git restore tty force-read hack This portable-specific hack fixes a hang on exit for ttyful sessions on Linux and some SysVish Unix variants. It was accidentally disabled in commit 5c79952dfe1a (a precursor to the mainloop poll(2) conversion). Spotted by John in bz3383 --- diff --git a/channels.c b/channels.c index 8281e5d3b..dbfec7c00 100644 --- a/channels.c +++ b/channels.c @@ -1922,7 +1922,7 @@ channel_handle_rfd(struct ssh *ssh, Channel *c) force = c->isatty && c->detach_close && c->istate != CHAN_INPUT_CLOSED; - if ((c->io_ready & SSH_CHAN_IO_RFD) == 0) + if (!force && (c->io_ready & SSH_CHAN_IO_RFD) == 0) return 1; errno = 0; @@ -2087,7 +2087,7 @@ channel_handle_efd_read(struct ssh *ssh, Channel *c) force = c->isatty && c->detach_close && c->istate != CHAN_INPUT_CLOSED; - if ((c->io_ready & SSH_CHAN_IO_EFD_R) == 0) + if (!force && (c->io_ready & SSH_CHAN_IO_EFD_R) == 0) return 1; len = read(c->efd, buf, sizeof(buf));