# HG changeset patch # User Michael Pavone # Date 1588976267 25200 # Node ID cd163b230cf91c795803b33b8420f63a8e1b1ea0 # Parent f2d37131840eb9971b7946fd1a42716dbf93eecc Fix handling of remote disconnects diff -r f2d37131840e -r cd163b230cf9 event_log.c --- a/event_log.c Fri May 08 14:59:49 2020 -0700 +++ b/event_log.c Fri May 08 15:17:47 2020 -0700 @@ -253,12 +253,20 @@ sent = send(remotes[i], remote_send_progress[i], output_stream.next_out - remote_send_progress[i], 0); if (sent >= 0) { remote_send_progress[i] += sent; - } else if (socket_error_is_wouldblock()) { + } else if (!socket_error_is_wouldblock()) { socket_close(remotes[i]); remotes[i] = remotes[num_remotes-1]; remote_send_progress[i] = remote_send_progress[num_remotes-1]; remote_needs_state[i] = remote_needs_state[num_remotes-1]; num_remotes--; + if (!num_remotes) { + //last remote disconnected, reset buffers/deflate + fully_active = 0; + deflateReset(&output_stream); + output_stream.next_out = compressed; + output_stream.avail_out = compressed_storage; + buffer.size = 0; + } i--; break; } diff -r f2d37131840e -r cd163b230cf9 util.c --- a/util.c Fri May 08 14:59:49 2020 -0700 +++ b/util.c Fri May 08 15:17:47 2020 -0700 @@ -726,9 +726,14 @@ #else #include +#include void socket_init(void) { + //SIGPIPE on network sockets is not desired + //would be better to do this in a more limited way, + //but the alternatives are not portable + signal(SIGPIPE, SIG_IGN); } int socket_blocking(int sock, int should_block)