From 95ea54b4cf3fd49d4ada2809ebfa41d73303761b Mon Sep 17 00:00:00 2001 From: Paul Cruz Date: Mon, 3 Jul 2017 19:24:22 -0700 Subject: [PATCH] added code for waiitng for all jobs to finish --- contrib/adaptive-compression/v2 | Bin 467087 -> 466752 bytes contrib/adaptive-compression/v2.c | 37 ++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/contrib/adaptive-compression/v2 b/contrib/adaptive-compression/v2 index 0c0e194ebae05845c80f8f24d2534a53a56c414d..38034cdab55dde6c55382233c34d86b0b58d2083 100755 GIT binary patch delta 40567 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 gtqk!jobCompleted_cond, NULL); pthread_mutex_init(&ctx->jobReady_mutex, NULL); pthread_cond_init(&ctx->jobReady_cond, NULL); + pthread_mutex_init(&ctx->allJobsCompleted_mutex, NULL); + pthread_cond_init(&ctx->allJobsCompleted_cond, NULL); ctx->numJobs = numJobs; ctx->jobs = calloc(1, numJobs*sizeof(jobDescription)); ctx->nextJobID = 0; ctx->threadError = 0; + ctx->allJobsCompleted = 0; if (!ctx->jobs) { DISPLAY("Error: could not allocate space for jobs during context creation\n"); return NULL; @@ -90,15 +96,21 @@ static void freeCompressionJobs(adaptCCtx* ctx) static int freeCCtx(adaptCCtx* ctx) { - /* TODO: wait until jobs finish */ - int const completedMutexError = pthread_mutex_destroy(&ctx->jobCompleted_mutex); - int const completedCondError = pthread_cond_destroy(&ctx->jobCompleted_cond); - int const readyMutexError = pthread_mutex_destroy(&ctx->jobReady_mutex); - int const readyCondError = pthread_cond_destroy(&ctx->jobReady_cond); - int const fileError = fclose(ctx->dstFile); - freeCompressionJobs(ctx); - free(ctx->jobs); - return completedMutexError | completedCondError | readyMutexError | readyCondError | fileError; + pthread_mutex_lock(&ctx->allJobsCompleted_mutex); + while (ctx->allJobsCompleted == 0) { + pthread_cond_wait(&ctx->allJobsCompleted_cond, &ctx->allJobsCompleted_mutex); + } + pthread_mutex_unlock(&ctx->allJobsCompleted_mutex); + { + int const completedMutexError = pthread_mutex_destroy(&ctx->jobCompleted_mutex); + int const completedCondError = pthread_cond_destroy(&ctx->jobCompleted_cond); + int const readyMutexError = pthread_mutex_destroy(&ctx->jobReady_mutex); + int const readyCondError = pthread_cond_destroy(&ctx->jobReady_cond); + int const fileError = fclose(ctx->dstFile); + freeCompressionJobs(ctx); + free(ctx->jobs); + return completedMutexError | completedCondError | readyMutexError | readyCondError | fileError; + } } static void* compressionThread(void* arg) @@ -164,6 +176,10 @@ static void* outputThread(void* arg) currJob++; if (currJob >= ctx->numJobs || ctx->threadError) { /* finished with all jobs */ + pthread_mutex_lock(&ctx->allJobsCompleted_mutex); + ctx->allJobsCompleted = 1; + pthread_cond_signal(&ctx->allJobsCompleted_cond); + pthread_mutex_unlock(&ctx->allJobsCompleted_mutex); break; } } @@ -267,6 +283,7 @@ int main(int argCount, const char* argv[]) goto cleanup; } } + /* create compression thread */ { pthread_t compression; @@ -297,7 +314,7 @@ int main(int argCount, const char* argv[]) } if (feof(srcFile)) break; } - DISPLAY("cleanup\n"); + cleanup: /* file compression completed */ ret |= (srcFile != NULL) ? fclose(srcFile) : 0;