diff options
author | djm <djm> | 2007-06-11 03:03:16 +0000 |
---|---|---|
committer | djm <djm> | 2007-06-11 03:03:16 +0000 |
commit | ecf14bbf8e874b7e22f59597ee8471e69261ea1d (patch) | |
tree | 6d0f5fa9de30aac9b7593e641395b02293be100c /channels.c | |
parent | 0ed62039739456de4f41ca965c3b051654aeefa7 (diff) | |
download | openssh-ecf14bbf8e874b7e22f59597ee8471e69261ea1d.tar.gz |
- (djm) Bugzilla #1306: silence spurious error messages from hang-on-exit
fix; tested by dtucker@ and jochen.kirn AT gmail.com
Diffstat (limited to 'channels.c')
-rw-r--r-- | channels.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -1446,14 +1446,13 @@ static int channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset) { char buf[CHAN_RBUF]; - int len; + int len, force; - if (c->rfd != -1 && - (c->detach_close || FD_ISSET(c->rfd, readset))) { + force = c->isatty && c->detach_close && c->istate != CHAN_INPUT_CLOSED; + if (c->rfd != -1 && (force || FD_ISSET(c->rfd, readset))) { errno = 0; len = read(c->rfd, buf, sizeof(buf)); - if (len < 0 && (errno == EINTR || - (errno == EAGAIN && !(c->isatty && c->detach_close)))) + if (len < 0 && (errno == EINTR || (errno == EAGAIN && !force))) return 1; #ifndef PTY_ZEROREAD if (len <= 0) { |