]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
changed to using compressCCtx
authorPaul Cruz <paulcruz74@fb.com>
Fri, 7 Jul 2017 22:13:40 +0000 (15:13 -0700)
committerPaul Cruz <paulcruz74@fb.com>
Fri, 7 Jul 2017 22:13:40 +0000 (15:13 -0700)
contrib/adaptive-compression/multi.c

index 647d54ba42dedad0dde4cc1c7f4f2d9eba95b236..943bd8564ac2c87cb61c32a0a2040d05303271a4 100644 (file)
@@ -72,6 +72,7 @@ typedef struct {
     stat_t stats;
     jobDescription* jobs;
     FILE* dstFile;
+    ZSTD_CCtx* cctx;
 } adaptCCtx;
 
 static void freeCompressionJobs(adaptCCtx* ctx)
@@ -96,11 +97,12 @@ static int freeCCtx(adaptCCtx* ctx)
         int const jobWriteMutexError = pthread_mutex_destroy(&ctx->jobWrite_mutex);
         int const jobWriteCondError = pthread_cond_destroy(&ctx->jobWrite_cond);
         int const fileCloseError =  (ctx->dstFile != NULL && ctx->dstFile != stdout) ? fclose(ctx->dstFile) : 0;
+        int const cctxError = ZSTD_isError(ZSTD_freeCCtx(ctx->cctx)) ? 1 : 0;
         if (ctx->jobs){
             freeCompressionJobs(ctx);
             free(ctx->jobs);
         }
-        return compressedMutexError | compressedCondError | readyMutexError | readyCondError | fileCloseError | allJobsMutexError | allJobsCondError | jobWriteMutexError | jobWriteCondError;
+        return compressedMutexError | compressedCondError | readyMutexError | readyCondError | fileCloseError | allJobsMutexError | allJobsCondError | jobWriteMutexError | jobWriteCondError | cctxError;
     }
 }
 
@@ -132,6 +134,12 @@ static adaptCCtx* createCCtx(unsigned numJobs, const char* const outFilename)
     ctx->threadError = 0;
     ctx->allJobsCompleted = 0;
     ctx->adaptParam = DEFAULT_ADAPT_PARAM;
+    ctx->cctx = ZSTD_createCCtx();
+    if (!ctx->cctx) {
+        DISPLAY("Error: could not allocate ZSTD_CCtx\n");
+        freeCCtx(ctx);
+        return NULL;
+    }
     if (!ctx->jobs) {
         DISPLAY("Error: could not allocate space for jobs during context creation\n");
         freeCCtx(ctx);
@@ -214,7 +222,7 @@ static void* compressionThread(void* arg)
         {
             unsigned const cLevel = adaptCompressionLevel(ctx);
             DEBUGLOG(2, "cLevel used: %u\n", cLevel);
-            size_t const compressedSize = ZSTD_compress(job->dst.start, job->dst.size, job->src.start, job->src.size, cLevel);
+            size_t const compressedSize = ZSTD_compressCCtx(ctx->cctx, job->dst.start, job->dst.size, job->src.start, job->src.size, cLevel);
             if (ZSTD_isError(compressedSize)) {
                 ctx->threadError = 1;
                 DISPLAY("Error: something went wrong during compression: %s\n", ZSTD_getErrorName(compressedSize));