From: Yann Collet Date: Thu, 28 Sep 2017 19:19:28 +0000 (-0700) Subject: Merge branch 'dev' into shorterTests X-Git-Tag: v1.3.2~3^2~21^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e4ec42772066fb0c30b2d43ab6e75108815bb86a;p=thirdparty%2Fzstd.git Merge branch 'dev' into shorterTests fixed conflicts --- e4ec42772066fb0c30b2d43ab6e75108815bb86a diff --cc lib/compress/zstdmt_compress.c index d83abaf39,b15bf05af..bc7d1e540 --- a/lib/compress/zstdmt_compress.c +++ b/lib/compress/zstdmt_compress.c @@@ -494,21 -496,6 +496,21 @@@ static void ZSTDMT_releaseAllJobResourc mtctx->allJobsCompleted = 1; } +static void ZSTDMT_waitForAllJobsCompleted(ZSTDMT_CCtx* zcs) +{ + DEBUGLOG(4, "ZSTDMT_waitForAllJobsCompleted"); + while (zcs->doneJobID < zcs->nextJobID) { + unsigned const jobID = zcs->doneJobID & zcs->jobIDMask; - PTHREAD_MUTEX_LOCK(&zcs->jobCompleted_mutex); ++ ZSTD_PTHREAD_MUTEX_LOCK(&zcs->jobCompleted_mutex); + while (zcs->jobs[jobID].jobCompleted==0) { + DEBUGLOG(5, "waiting for jobCompleted signal from chunk %u", zcs->doneJobID); /* we want to block when waiting for data to flush */ - pthread_cond_wait(&zcs->jobCompleted_cond, &zcs->jobCompleted_mutex); ++ ZSTD_pthread_cond_wait(&zcs->jobCompleted_cond, &zcs->jobCompleted_mutex); + } - pthread_mutex_unlock(&zcs->jobCompleted_mutex); ++ ZSTD_pthread_mutex_unlock(&zcs->jobCompleted_mutex); + zcs->doneJobID++; + } +} + size_t ZSTDMT_freeCCtx(ZSTDMT_CCtx* mtctx) { if (mtctx==NULL) return 0; /* compatible with free on NULL */ diff --cc tests/zstreamtest.c index f69cdd646,f395d7ec5..6ae4ef96c --- a/tests/zstreamtest.c +++ b/tests/zstreamtest.c @@@ -1505,8 -1507,8 +1505,8 @@@ static int fuzzerTests_newAPI(U32 seed size_t const randomDstSize = FUZ_randomLength(&lseed, maxSampleLog); size_t const dstBuffSize = MIN(dstBufferSize - totalGenSize, randomDstSize); inBuff.size = inBuff.pos + readCSrcSize; - outBuff.size = inBuff.pos + dstBuffSize; + outBuff.size = outBuff.pos + dstBuffSize; - DISPLAYLEVEL(5, "ZSTD_decompressStream input %u bytes (pos:%u/%u)\n", + DISPLAYLEVEL(6, "ZSTD_decompressStream input %u bytes (pos:%u/%u)\n", (U32)readCSrcSize, (U32)inBuff.pos, (U32)cSize); decompressionResult = ZSTD_decompressStream(zd, &outBuff, &inBuff); CHECK (ZSTD_isError(decompressionResult), "decompression error : %s", ZSTD_getErrorName(decompressionResult));