]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Signal parameter change during MT compression 3403/head
authorYann Collet <cyan@fb.com>
Wed, 28 Dec 2022 21:14:58 +0000 (13:14 -0800)
committerYann Collet <cyan@fb.com>
Wed, 28 Dec 2022 21:14:58 +0000 (13:14 -0800)
lib/compress/zstd_compress.c

index f35f7a7a6765dce0f8dd16eff1f98693f3540a57..fee502984b4417f905f1c67c12742416eab58b32 100644 (file)
@@ -664,7 +664,7 @@ size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value)
         if (ZSTD_isUpdateAuthorized(param)) {
             cctx->cParamsChanged = 1;
         } else {
-            RETURN_ERROR(stage_wrong, "can only set params in ctx init stage");
+            RETURN_ERROR(stage_wrong, "can only set params in cctx init stage");
     }   }
 
     switch(param)
@@ -1103,8 +1103,15 @@ size_t ZSTD_CCtx_setParametersUsingCCtxParams(
 
 size_t ZSTD_CCtx_setCParams(ZSTD_CCtx* cctx, ZSTD_compressionParameters cparams)
 {
-    FORWARD_IF_ERROR(ZSTD_checkCParams(cparams), "");
+    DEBUGLOG(4, "ZSTD_CCtx_setCParams");
     assert(cctx != NULL);
+    if (cctx->streamStage != zcss_init) {
+        /* All parameters in @cparams are allowed to be updated during MT compression.
+         * This must be signaled, so that MT compression picks up the changes */
+        cctx->cParamsChanged = 1;
+    }
+    /* only update if parameters are valid */
+    FORWARD_IF_ERROR(ZSTD_checkCParams(cparams), "");
     cctx->requestedParams.cParams = cparams;
     return 0;
 }