mirror of
https://github.com/PowerShell/openssh-portable.git
synced 2025-07-28 16:24:39 +02:00
upstream commit
Only check errno if read() has returned an error. EOF is not an error. This fixes a problem where the mux master would sporadically fail to notice that the client had exited. ok mikeb@ djm@ Upstream-ID: 3c2dadc21fac6ef64665688aac8a75fffd57ae53
This commit is contained in:
parent
56d7dac790
commit
603ba41179
14
channels.c
14
channels.c
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: channels.c,v 1.348 2015/10/15 23:51:40 djm Exp $ */
|
/* $OpenBSD: channels.c,v 1.349 2016/02/05 13:28:19 naddy Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -1896,13 +1896,13 @@ read_mux(Channel *c, u_int need)
|
|||||||
if (buffer_len(&c->input) < need) {
|
if (buffer_len(&c->input) < need) {
|
||||||
rlen = need - buffer_len(&c->input);
|
rlen = need - buffer_len(&c->input);
|
||||||
len = read(c->rfd, buf, MIN(rlen, CHAN_RBUF));
|
len = read(c->rfd, buf, MIN(rlen, CHAN_RBUF));
|
||||||
|
if (len < 0 && (errno == EINTR || errno == EAGAIN))
|
||||||
|
return buffer_len(&c->input);
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
if (errno != EINTR && errno != EAGAIN) {
|
debug2("channel %d: ctl read<=0 rfd %d len %d",
|
||||||
debug2("channel %d: ctl read<=0 rfd %d len %d",
|
c->self, c->rfd, len);
|
||||||
c->self, c->rfd, len);
|
chan_read_failed(c);
|
||||||
chan_read_failed(c);
|
return 0;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
buffer_append(&c->input, buf, len);
|
buffer_append(&c->input, buf, len);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user