diff options
author | Darren Tucker <dtucker@zip.com.au> | 2007-06-11 14:32:30 +1000 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2007-06-11 14:32:30 +1000 |
commit | 98015ba05ed9718654f2cf3413a67509060fda1e (patch) | |
tree | 1d70fa6fb63dde198107aef76c5cfad272226f33 | |
parent | a50bfccd463db55ce2c9121898446c12534cdf1e (diff) |
- (djm) Bugzilla #1306: silence spurious error messages from hang-on-exit
fix; tested by dtucker@ and jochen.kirn AT gmail.com (backport from HEAD)
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | channels.c | 9 |
2 files changed, 9 insertions, 6 deletions
@@ -1,3 +1,7 @@ +20070611 + - (djm) Bugzilla #1306: silence spurious error messages from hang-on-exit + fix; tested by dtucker@ and jochen.kirn AT gmail.com (backport from HEAD) + 20070605 - (dtucker) [mdoc2man.awk] Sync with rev 1.8, mainly for %R reference support used for RFCs. @@ -2854,4 +2858,4 @@ OpenServer 6 and add osr5bigcrypt support so when someone migrates passwords between UnixWare and OpenServer they will still work. OK dtucker@ -$Id: ChangeLog,v 1.4635.2.8 2007/06/05 10:05:37 dtucker Exp $ +$Id: ChangeLog,v 1.4635.2.9 2007/06/11 04:32:30 dtucker Exp $ @@ -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) { |