summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@zip.com.au>2007-06-11 14:32:30 +1000
committerDarren Tucker <dtucker@zip.com.au>2007-06-11 14:32:30 +1000
commit98015ba05ed9718654f2cf3413a67509060fda1e (patch)
tree1d70fa6fb63dde198107aef76c5cfad272226f33
parenta50bfccd463db55ce2c9121898446c12534cdf1e (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--ChangeLog6
-rw-r--r--channels.c9
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) {