comparison event_log.c @ 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
comparison
equal deleted inserted replaced
1971:80920c21bb52 1972:f2d37131840e
355 } 355 }
356 356
357 void deflate_flush(uint8_t full) 357 void deflate_flush(uint8_t full)
358 { 358 {
359 output_stream.avail_in = buffer.size - (output_stream.next_in - buffer.data); 359 output_stream.avail_in = buffer.size - (output_stream.next_in - buffer.data);
360 while (output_stream.avail_in) 360 uint8_t force = full;
361 while (output_stream.avail_in || force)
361 { 362 {
362 if (!output_stream.avail_out) { 363 if (!output_stream.avail_out) {
363 size_t old_storage = compressed_storage; 364 size_t old_storage = compressed_storage;
364 uint8_t *old_compressed = compressed; 365 uint8_t *old_compressed = compressed;
365 compressed_storage *= 2; 366 compressed_storage *= 2;
374 } 375 }
375 int result = deflate(&output_stream, full ? Z_FINISH : Z_SYNC_FLUSH); 376 int result = deflate(&output_stream, full ? Z_FINISH : Z_SYNC_FLUSH);
376 if (result != (full ? Z_STREAM_END : Z_OK)) { 377 if (result != (full ? Z_STREAM_END : Z_OK)) {
377 fatal_error("deflate returned %d\n", result); 378 fatal_error("deflate returned %d\n", result);
378 } 379 }
379 if (full) { 380 if (full && result == Z_STREAM_END) {
380 result = deflateReset(&output_stream); 381 result = deflateReset(&output_stream);
381 if (result != Z_OK) { 382 if (result != Z_OK) {
382 fatal_error("deflateReset returned %d\n", result); 383 fatal_error("deflateReset returned %d\n", result);
383 } 384 }
384 } 385 }
386 force = 0;
385 } 387 }
386 output_stream.next_in = buffer.data; 388 output_stream.next_in = buffer.data;
387 buffer.size = 0; 389 buffer.size = 0;
388 } 390 }
389 391