From 93ff837938b51373bc60153ef60409f6c1f795c8 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Mon, 23 Jun 2014 19:47:37 -0500 Subject: [PATCH] extract.c: Send "extract streams" progress at least every 5 MB --- NEWS | 5 +++-- src/extract.c | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index a903d01f..74052dc3 100644 --- a/NEWS +++ b/NEWS @@ -5,8 +5,9 @@ Version 1.7.1-BETA: Library users can now initialize and de-initialize the library multiple times in one run of an application program. - Library users will now receive WIMLIB_PROGRESS_MSG_WRITE_STREAMS - messages more frequently when writing large WIM files. + Library users will now receive WIMLIB_PROGRESS_MSG_WRITE_STREAMS and + WIMLIB_PROGRESS_MSG_EXTRACT_STREAMS messages more frequently when + writing or extracting large WIM files. Added experimental new write flag: WIMLIB_WRITE_FLAG_SEND_DONE_WITH_FILE_MESSAGES. diff --git a/src/extract.c b/src/extract.c index 383aaf71..e62fa8a8 100644 --- a/src/extract.c +++ b/src/extract.c @@ -355,8 +355,23 @@ extract_chunk_wrapper(const void *chunk, size_t size, void *_ctx) { ctx->next_progress = UINT64_MAX; } else { - ctx->next_progress += progress->extract.total_bytes / 128; - if (ctx->next_progress > progress->extract.total_bytes) + /* Send new message as soon as another 1/128 of the + * total has been extracted. (Arbitrary number.) */ + ctx->next_progress = + progress->extract.completed_bytes + + progress->extract.total_bytes / 128; + + /* ... Unless that would be more than 5000000 bytes, in + * which case send the next after the next 5000000 + * bytes. (Another arbitrary number.) */ + if (progress->extract.completed_bytes + 5000000 < + ctx->next_progress) + ctx->next_progress = + progress->extract.completed_bytes + 5000000; + + /* ... But always send a message as soon as we're + * completely done. */ + if (progress->extract.total_bytes < ctx->next_progress) ctx->next_progress = progress->extract.total_bytes; } } -- 2.43.0