changeset 1972:f2d37131840e

Fix "full" deflate flush so multiple remotes can successfully join
author Michael Pavone <pavone@retrodev.com>
date Fri, 08 May 2020 14:59:49 -0700
parents 80920c21bb52
children cd163b230cf9
files event_log.c
diffstat 1 files changed, 4 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/event_log.c	Fri May 08 11:40:30 2020 -0700
+++ b/event_log.c	Fri May 08 14:59:49 2020 -0700
@@ -357,7 +357,8 @@
 void deflate_flush(uint8_t full)
 {
 	output_stream.avail_in = buffer.size - (output_stream.next_in - buffer.data);
-	while (output_stream.avail_in)
+	uint8_t force = full;
+	while (output_stream.avail_in || force)
 	{
 		if (!output_stream.avail_out) {
 			size_t old_storage = compressed_storage;
@@ -376,12 +377,13 @@
 		if (result != (full ? Z_STREAM_END : Z_OK)) {
 			fatal_error("deflate returned %d\n", result);
 		}
-		if (full) {
+		if (full && result == Z_STREAM_END) {
 			result = deflateReset(&output_stream);
 			if (result != Z_OK) {
 				fatal_error("deflateReset returned %d\n", result);
 			}
 		}
+		force = 0;
 	}
 	output_stream.next_in = buffer.data;
 	buffer.size = 0;