[libzstd] Require ZSTD_MULTITHREAD to create a ZSTDMT_CCtx
ZSTDMT was broken when compiled without ZSTD_MULTITHREAD defined, because `ZSTD_CCtx_setParameter(cctx, ZSTD_c_nbWorkers, nbWorkerss)` failed. It was detected by the MSVC test which runs the fuzzer with multithreading disabled. This is a very niche use case of a deprecated API, because the API is inefficient and synchronous, since `threading.h` will be synchronous. Users almost certainly don't want this, and anyone who tested their code should realize that it is broken. Therefore, I think it is safe to require `ZSTD_MULTITHREAD` to be defined to use ZSTDMT.
This commit is contained in:
parent
a821aee3b1
commit
de0499f7fa
@ -5,6 +5,7 @@ api: Make ZSTD_e_flush and ZSTD_e_end block for maximum forward progress
|
|||||||
api: Rename ZSTD_CCtxParam_getParameter to ZSTD_CCtxParams_getParameter
|
api: Rename ZSTD_CCtxParam_getParameter to ZSTD_CCtxParams_getParameter
|
||||||
api: Rename ZSTD_CCtxParam_setParameter to ZSTD_CCtxParams_setParameter
|
api: Rename ZSTD_CCtxParam_setParameter to ZSTD_CCtxParams_setParameter
|
||||||
api: Don't export ZSTDMT functions from the shared library by default
|
api: Don't export ZSTDMT functions from the shared library by default
|
||||||
|
api: Require ZSTD_MULTITHREAD to be defined to use ZSTDMT
|
||||||
api: Add ZSTD_decompressBound() to provide an upper bound on decompressed size by @shakeelrao
|
api: Add ZSTD_decompressBound() to provide an upper bound on decompressed size by @shakeelrao
|
||||||
api: Fix ZSTD_decompressDCtx() corner cases with a dictionary
|
api: Fix ZSTD_decompressDCtx() corner cases with a dictionary
|
||||||
api: Move ZSTD_getDictID_*() functions to the stable section
|
api: Move ZSTD_getDictID_*() functions to the stable section
|
||||||
|
@ -874,6 +874,10 @@ ZSTDMT_CCtx* ZSTDMT_createCCtx_advanced(unsigned nbWorkers, ZSTD_customMem cMem)
|
|||||||
int initError;
|
int initError;
|
||||||
DEBUGLOG(3, "ZSTDMT_createCCtx_advanced (nbWorkers = %u)", nbWorkers);
|
DEBUGLOG(3, "ZSTDMT_createCCtx_advanced (nbWorkers = %u)", nbWorkers);
|
||||||
|
|
||||||
|
#ifndef ZSTD_MULTITHREAD
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (nbWorkers < 1) return NULL;
|
if (nbWorkers < 1) return NULL;
|
||||||
nbWorkers = MIN(nbWorkers , ZSTDMT_NBWORKERS_MAX);
|
nbWorkers = MIN(nbWorkers , ZSTDMT_NBWORKERS_MAX);
|
||||||
if ((cMem.customAlloc!=NULL) ^ (cMem.customFree!=NULL))
|
if ((cMem.customAlloc!=NULL) ^ (cMem.customFree!=NULL))
|
||||||
|
@ -19,12 +19,16 @@
|
|||||||
/* Note : This is an internal API.
|
/* Note : This is an internal API.
|
||||||
* These APIs used to be exposed with ZSTDLIB_API,
|
* These APIs used to be exposed with ZSTDLIB_API,
|
||||||
* because it used to be the only way to invoke MT compression.
|
* because it used to be the only way to invoke MT compression.
|
||||||
* Now, it's recommended to use ZSTD_compress_generic() instead.
|
* Now, it's recommended to use ZSTD_compress2 and ZSTD_compressStream2()
|
||||||
|
* instead.
|
||||||
*
|
*
|
||||||
* If you depend on these APIs and can't switch, then define
|
* If you depend on these APIs and can't switch, then define
|
||||||
* ZSTD_LEGACY_MULTITHREADED_API when making the dynamic library.
|
* ZSTD_LEGACY_MULTITHREADED_API when making the dynamic library.
|
||||||
* However, we may completely remove these functions in a future
|
* However, we may completely remove these functions in a future
|
||||||
* release, so please switch soon.
|
* release, so please switch soon.
|
||||||
|
*
|
||||||
|
* This API requires ZSTD_MULTITHREAD to be defined during compilation,
|
||||||
|
* otherwise ZSTDMT_createCCtx*() will fail.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef ZSTD_LEGACY_MULTITHREADED_API
|
#ifdef ZSTD_LEGACY_MULTITHREADED_API
|
||||||
@ -51,7 +55,9 @@
|
|||||||
|
|
||||||
/* === Memory management === */
|
/* === Memory management === */
|
||||||
typedef struct ZSTDMT_CCtx_s ZSTDMT_CCtx;
|
typedef struct ZSTDMT_CCtx_s ZSTDMT_CCtx;
|
||||||
|
/* Requires ZSTD_MULTITHREAD to be defined during compilation, otherwise it will return NULL. */
|
||||||
ZSTDMT_API ZSTDMT_CCtx* ZSTDMT_createCCtx(unsigned nbWorkers);
|
ZSTDMT_API ZSTDMT_CCtx* ZSTDMT_createCCtx(unsigned nbWorkers);
|
||||||
|
/* Requires ZSTD_MULTITHREAD to be defined during compilation, otherwise it will return NULL. */
|
||||||
ZSTDMT_API ZSTDMT_CCtx* ZSTDMT_createCCtx_advanced(unsigned nbWorkers,
|
ZSTDMT_API ZSTDMT_CCtx* ZSTDMT_createCCtx_advanced(unsigned nbWorkers,
|
||||||
ZSTD_customMem cMem);
|
ZSTD_customMem cMem);
|
||||||
ZSTDMT_API size_t ZSTDMT_freeCCtx(ZSTDMT_CCtx* mtctx);
|
ZSTDMT_API size_t ZSTDMT_freeCCtx(ZSTDMT_CCtx* mtctx);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user