summaryrefslogtreecommitdiff
path: root/channels.c
diff options
context:
space:
mode:
authordjm <djm>2007-06-11 03:03:16 +0000
committerdjm <djm>2007-06-11 03:03:16 +0000
commitecf14bbf8e874b7e22f59597ee8471e69261ea1d (patch)
tree6d0f5fa9de30aac9b7593e641395b02293be100c /channels.c
parent0ed62039739456de4f41ca965c3b051654aeefa7 (diff)
downloadopenssh-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.c9
1 files changed, 4 insertions, 5 deletions
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) {