]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
CCtxPool starts empty, as suggested by @terrelln
authorYann Collet <cyan@fb.com>
Wed, 18 Jan 2017 20:12:10 +0000 (12:12 -0800)
committerYann Collet <cyan@fb.com>
Wed, 18 Jan 2017 20:12:10 +0000 (12:12 -0800)
Also : make zstdmt now a target from root

.gitignore
Makefile
lib/compress/zstdmt_compress.c

index 796a696d3e766c5583c3671ab2b70cd0995c4e34..dd7a7451902c8965ea941f3b6e98420654ac410f 100644 (file)
@@ -15,6 +15,7 @@
 
 # Executables
 zstd
+zstdmt
 *.exe
 *.out
 *.app
index 0a3634c392e128427dd8c102e24ea9ad558b1625..8ffc9ae9d4f1c7f1602d0273ff5be7c5b2f9d36a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -50,6 +50,11 @@ zstd:
        @$(MAKE) -C $(PRGDIR) $@
        cp $(PRGDIR)/zstd$(EXT) .
 
+.PHONY: zstdmt
+zstdmt:
+       @$(MAKE) -C $(PRGDIR) $@
+       cp $(PRGDIR)/zstd$(EXT) ./zstdmt$(EXT)
+
 .PHONY: zlibwrapper
 zlibwrapper:
        $(MAKE) -C $(ZWRAPDIR) test
index 329dc78fdd25466b0dc029663ae392f33688e674..f880e8525da87fd8bbb8e8fd7364404201f555fb 100644 (file)
@@ -122,8 +122,8 @@ typedef struct {
 static void ZSTDMT_freeCCtxPool(ZSTDMT_CCtxPool* pool)
 {
     unsigned u;
-    for (u=0; u<pool->availCCtx; u++)  /* note : availCCtx is supposed == totalCCtx; otherwise, some CCtx are still in use */
-        ZSTD_freeCCtx(pool->cctx[u]);
+    for (u=0; u<pool->totalCCtx; u++)
+        ZSTD_freeCCtx(pool->cctx[u]);  /* note : compatible with free on NULL */
     free(pool);
 }
 
@@ -131,15 +131,8 @@ static ZSTDMT_CCtxPool* ZSTDMT_createCCtxPool(unsigned nbThreads)
 {
     ZSTDMT_CCtxPool* const cctxPool = (ZSTDMT_CCtxPool*) calloc(1, sizeof(ZSTDMT_CCtxPool) + nbThreads*sizeof(ZSTD_CCtx*));
     if (!cctxPool) return NULL;
-    {   unsigned threadNb;
-        for (threadNb=0; threadNb<nbThreads; threadNb++) {
-            cctxPool->cctx[threadNb] = ZSTD_createCCtx();
-            if (cctxPool->cctx[threadNb]==NULL) {   /* failed cctx allocation : abort cctxPool creation */
-                cctxPool->totalCCtx = cctxPool->availCCtx = threadNb;
-                ZSTDMT_freeCCtxPool(cctxPool);
-                return NULL;
-    }   }   }
-    cctxPool->totalCCtx = cctxPool->availCCtx = nbThreads;
+    cctxPool->totalCCtx = nbThreads;
+    cctxPool->availCCtx = 0;
     return cctxPool;
 }
 
@@ -149,17 +142,16 @@ static ZSTD_CCtx* ZSTDMT_getCCtx(ZSTDMT_CCtxPool* pool)
         pool->availCCtx--;
         return pool->cctx[pool->availCCtx];
     }
-    /* note : should not be possible, since totalCCtx==nbThreads */
-    return ZSTD_createCCtx();   /* note : can be NULL is creation fails ! */
+    return ZSTD_createCCtx();   /* note : can be NULL, when creation fails ! */
 }
 
 static void ZSTDMT_releaseCCtx(ZSTDMT_CCtxPool* pool, ZSTD_CCtx* cctx)
 {
-    if (cctx==NULL) return;   /* release on NULL */
+    if (cctx==NULL) return;   /* compatibility with release on NULL */
     if (pool->availCCtx < pool->totalCCtx)
         pool->cctx[pool->availCCtx++] = cctx;
     else
-    /* note : should not be possible, since totalCCtx==nbThreads */
+        /* pool overflow : should not happen, since totalCCtx==nbThreads */
         ZSTD_freeCCtx(cctx);
 }