summaryrefslogtreecommitdiff
path: root/event_log.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2020-05-08 15:17:47 -0700
committerMichael Pavone <pavone@retrodev.com>2020-05-08 15:17:47 -0700
commite37c7be93e131e8f73b96e5b761a983b36efc420 (patch)
tree5a45643c122ae81c2020f24a6e385c70c290e586 /event_log.c
parent4bc8dcfd59d3cf49190883fb13d238d2929b11fe (diff)
Fix handling of remote disconnects
Diffstat (limited to 'event_log.c')
-rw-r--r--event_log.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/event_log.c b/event_log.c
index 041a736..0ef8baa 100644
--- a/event_log.c
+++ b/event_log.c
@@ -253,12 +253,20 @@ static void flush_socket(void)
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;
}