opj_thread_pool_setup(): fix infinite waiting if a thread creation failed

This commit is contained in:
Even Rouault 2018-10-18 11:45:45 +02:00
parent 0e6a5553cf
commit cd900d9661
No known key found for this signature in database
GPG Key ID: 33EBBFC47B3DD87D
1 changed files with 3 additions and 1 deletions

View File

@ -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].thread = opj_thread_create(opj_worker_thread_function,
&(tp->worker_threads[i])); &(tp->worker_threads[i]));
if (tp->worker_threads[i].thread == NULL) { 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; tp->worker_threads_count = i;
bRet = OPJ_FALSE; bRet = OPJ_FALSE;
break; 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 */ /* Wait all threads to be started */
/* printf("waiting for all threads to be started\n"); */ /* printf("waiting for all threads to be started\n"); */
opj_mutex_lock(tp->mutex); 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_cond_wait(tp->cond, tp->mutex);
} }
opj_mutex_unlock(tp->mutex); opj_mutex_unlock(tp->mutex);