From cd900d96618ab77e79812db654731dd6b5fc7bd8 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 18 Oct 2018 11:45:45 +0200 Subject: [PATCH 1/1] opj_thread_pool_setup(): fix infinite waiting if a thread creation failed --- src/lib/openjp2/thread.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/openjp2/thread.c b/src/lib/openjp2/thread.c index af33c2c8..f2fca2ee 100644 --- a/src/lib/openjp2/thread.c +++ b/src/lib/openjp2/thread.c @@ -723,6 +723,8 @@ static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t* tp, int num_threads) tp->worker_threads[i].thread = opj_thread_create(opj_worker_thread_function, &(tp->worker_threads[i])); if (tp->worker_threads[i].thread == NULL) { + opj_mutex_destroy(tp->worker_threads[i].mutex); + opj_cond_destroy(tp->worker_threads[i].cond); tp->worker_threads_count = i; bRet = OPJ_FALSE; break; @@ -732,7 +734,7 @@ static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t* tp, int num_threads) /* Wait all threads to be started */ /* printf("waiting for all threads to be started\n"); */ opj_mutex_lock(tp->mutex); - while (tp->waiting_worker_thread_count < num_threads) { + while (tp->waiting_worker_thread_count < tp->worker_threads_count) { opj_cond_wait(tp->cond, tp->mutex); } opj_mutex_unlock(tp->mutex); -- 2.30.2