From 98015ba05ed9718654f2cf3413a67509060fda1e Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 11 Jun 2007 14:32:30 +1000 Subject: - (djm) Bugzilla #1306: silence spurious error messages from hang-on-exit fix; tested by dtucker@ and jochen.kirn AT gmail.com (backport from HEAD) --- ChangeLog | 6 +++++- channels.c | 9 ++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b03ad66..ffb85091 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 $ diff --git a/channels.c b/channels.c index c68ad641..bb14450f 100644 --- a/channels.c +++ b/channels.c @@ -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) { -- cgit v1.2.3