# HG changeset patch # User Matt Johnston # Date 1379693842 -28800 # Node ID 35183e8a7851d4cb8516289c1b6c71da41d7230b # Parent bcfa7f77953197d1e2a43b5770af3bebc503e0dd Improve EOF handling for half-close. Patch from Catalin Patulea Fixes the situation $ ./dbclient root@1.2.3.4 'cat; echo foo' ^D diff -r bcfa7f779531 -r 35183e8a7851 common-channel.c --- a/common-channel.c Mon Aug 12 22:41:00 2013 +0800 +++ b/common-channel.c Sat Sep 21 00:17:22 2013 +0800 @@ -307,7 +307,9 @@ 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 @@ /* 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