diff options
Diffstat (limited to 'common-channel.c')
-rw-r--r-- | common-channel.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/common-channel.c b/common-channel.c index 8b7369c..2068904 100644 --- a/common-channel.c +++ b/common-channel.c @@ -307,7 +307,9 @@ static void check_close(struct Channel *channel) { return; } - if (channel->recv_eof && !write_pending(channel)) { + if ((channel->recv_eof && !write_pending(channel)) + /* have a server "session" and child has exited */ + || (channel->type->check_close && close_allowed)) { close_chan_fd(channel, channel->writefd, SHUT_WR); } @@ -336,6 +338,7 @@ static void check_close(struct Channel *channel) { /* And if we can't receive any more data from them either, close up */ if (channel->readfd == FD_CLOSED + && channel->writefd == FD_CLOSED && (ERRFD_IS_WRITE(channel) || channel->errfd == FD_CLOSED) && !channel->sent_close && close_allowed |