From: Nick Terrell Date: Tue, 27 Aug 2019 01:19:29 +0000 (-0700) Subject: [dictBuilder] Fix deadlock in *COVER error case X-Git-Tag: v1.4.4~1^2~70^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0932de54bc0dbc6d29008b9e6087b88721ca8bb0;p=thirdparty%2Fzstd.git [dictBuilder] Fix deadlock in *COVER error case The COVER and FASTCOVER dictionary builders can deadlock when dictionary construction errors, likely because there are too few samples, or too few distinct dmers. The deadlock only occurs when there are errors. Fixes #1746. --- diff --git a/lib/dictBuilder/cover.c b/lib/dictBuilder/cover.c index 621996759..4721205da 100644 --- a/lib/dictBuilder/cover.c +++ b/lib/dictBuilder/cover.c @@ -919,13 +919,12 @@ void COVER_best_finish(COVER_best_t *best, ZDICT_cover_params_t parameters, } } /* Save the dictionary, parameters, and size */ - if (!dict) { - return; + if (dict) { + memcpy(best->dict, dict, dictSize); + best->dictSize = dictSize; + best->parameters = parameters; + best->compressedSize = compressedSize; } - memcpy(best->dict, dict, dictSize); - best->dictSize = dictSize; - best->parameters = parameters; - best->compressedSize = compressedSize; } if (liveJobs == 0) { ZSTD_pthread_cond_broadcast(&best->cond);