diff --git a/.gitignore b/.gitignore index 796a696d3..dd7a74519 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ # Executables zstd +zstdmt *.exe *.out *.app diff --git a/Makefile b/Makefile index 0a3634c39..8ffc9ae9d 100644 --- 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 diff --git a/lib/compress/zstdmt_compress.c b/lib/compress/zstdmt_compress.c index 329dc78fd..f880e8525 100644 --- a/lib/compress/zstdmt_compress.c +++ b/lib/compress/zstdmt_compress.c @@ -122,8 +122,8 @@ typedef struct { static void ZSTDMT_freeCCtxPool(ZSTDMT_CCtxPool* pool) { unsigned u; - for (u=0; uavailCCtx; u++) /* note : availCCtx is supposed == totalCCtx; otherwise, some CCtx are still in use */ - ZSTD_freeCCtx(pool->cctx[u]); + for (u=0; utotalCCtx; 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; threadNbcctx[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); }