]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
fixed ZSTDMT_createCCtx() : checked inner objects are properly created
authorYann Collet <cyan@fb.com>
Wed, 11 Jan 2017 14:58:05 +0000 (15:58 +0100)
committerYann Collet <cyan@fb.com>
Wed, 11 Jan 2017 14:58:05 +0000 (15:58 +0100)
lib/compress/zstdmt_compress.c

index 5c7b654abd5691e57c46c91645870a3266e2207e..5fbf32b931acc4458d7015a8188c6a56249b29c9 100644 (file)
@@ -206,12 +206,16 @@ ZSTDMT_CCtx *ZSTDMT_createCCtx(unsigned nbThreads)
     cctx->factory = POOL_create(nbThreads, 1);
     cctx->buffPool = ZSTDMT_createBufferPool(nbThreads);
     cctx->cctxPool = ZSTDMT_createCCtxPool(nbThreads);
-    pthread_mutex_init(&cctx->jobCompleted_mutex, NULL);
+    if (!cctx->factory | !cctx->buffPool | !cctx->cctxPool) {  /* one object was not created */
+        ZSTDMT_freeCCtx(cctx);
+        return NULL;
+    }
+    pthread_mutex_init(&cctx->jobCompleted_mutex, NULL);   /* Todo : check init function return */
     pthread_cond_init(&cctx->jobCompleted_cond, NULL);
     return cctx;
 }
 
-size_t ZSTDMT_freeCCtx(ZSTDMT_CCtx* mtctx)  /* incompleted ! */
+size_t ZSTDMT_freeCCtx(ZSTDMT_CCtx* mtctx)
 {
     POOL_free(mtctx->factory);
     ZSTDMT_freeBufferPool(mtctx->buffPool);