mirror of
https://github.com/facebook/zstd.git
synced 2025-09-05 14:04:09 +03:00
Check for job before releasing
ZSTDMT_freeCCtx calls ZSTDMT_releaseAllJobResources, but ZSTDMT_releaseAllJobResources may be called when ZSTDMT_freeCCtx is called when initialization fails, resulting in a NULL pointer dereference.
This commit is contained in:
@@ -1008,6 +1008,7 @@ static void ZSTDMT_releaseAllJobResources(ZSTDMT_CCtx* mtctx)
|
|||||||
{
|
{
|
||||||
unsigned jobID;
|
unsigned jobID;
|
||||||
DEBUGLOG(3, "ZSTDMT_releaseAllJobResources");
|
DEBUGLOG(3, "ZSTDMT_releaseAllJobResources");
|
||||||
|
if (mtctx->jobs) {
|
||||||
for (jobID=0; jobID <= mtctx->jobIDMask; jobID++) {
|
for (jobID=0; jobID <= mtctx->jobIDMask; jobID++) {
|
||||||
/* Copy the mutex/cond out */
|
/* Copy the mutex/cond out */
|
||||||
ZSTD_pthread_mutex_t const mutex = mtctx->jobs[jobID].job_mutex;
|
ZSTD_pthread_mutex_t const mutex = mtctx->jobs[jobID].job_mutex;
|
||||||
@@ -1021,6 +1022,7 @@ static void ZSTDMT_releaseAllJobResources(ZSTDMT_CCtx* mtctx)
|
|||||||
mtctx->jobs[jobID].job_mutex = mutex;
|
mtctx->jobs[jobID].job_mutex = mutex;
|
||||||
mtctx->jobs[jobID].job_cond = cond;
|
mtctx->jobs[jobID].job_cond = cond;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
mtctx->inBuff.buffer = g_nullBuffer;
|
mtctx->inBuff.buffer = g_nullBuffer;
|
||||||
mtctx->inBuff.filled = 0;
|
mtctx->inBuff.filled = 0;
|
||||||
mtctx->allJobsCompleted = 1;
|
mtctx->allJobsCompleted = 1;
|
||||||
|
Reference in New Issue
Block a user