]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
swap buffers instead of copying memory over
authorPaul Cruz <paulcruz74@fb.com>
Mon, 17 Jul 2017 21:39:10 +0000 (14:39 -0700)
committerPaul Cruz <paulcruz74@fb.com>
Mon, 17 Jul 2017 21:39:10 +0000 (14:39 -0700)
contrib/adaptive-compression/adapt.c

index 67d7fcc92cf674a188f858cc1506ce3a198f9cc0..3aec50c07b40cbea4dfbfbfd3fc69f8084d32469 100644 (file)
@@ -501,7 +501,12 @@ static int createCompressionJob(adaptCCtx* ctx, size_t srcSize, int last)
     job->src.size = srcSize;
     job->jobID = nextJob;
     job->lastJob = last;
-    memcpy(job->src.start, ctx->input.buffer.start, ctx->lastDictSize + srcSize);
+    {
+        /* swap buffer */
+        void* const copy = job->src.start;
+        job->src.start = ctx->input.buffer.start;
+        ctx->input.buffer.start = copy;
+    }
     job->dictSize = ctx->lastDictSize;
     pthread_mutex_lock(&ctx->jobReady_mutex.pMutex);
     ctx->jobReadyID++;
@@ -514,7 +519,7 @@ static int createCompressionJob(adaptCCtx* ctx, size_t srcSize, int last)
     if (!last) {
         size_t const oldDictSize = ctx->lastDictSize;
         DEBUG(3, "oldDictSize %zu\n", oldDictSize);
-        memmove(ctx->input.buffer.start, ctx->input.buffer.start + oldDictSize, srcSize);
+        memcpy(ctx->input.buffer.start, job->src.start + oldDictSize, srcSize);
         ctx->lastDictSize = srcSize;
         ctx->input.filled = srcSize;
     }