diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 13d25b7b052ba465c9663f2cd5ffb439ad178336..538b56ad5462e0639d722c458d23a7cab139353f 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -12402,16 +12402,26 @@ static int start_network_thread(void) ast_cond_init(&thread->cond, NULL); ast_mutex_init(&thread->init_lock); ast_cond_init(&thread->init_cond, NULL); + + ast_mutex_lock(&thread->init_lock); + if (ast_pthread_create_background(&thread->threadid, NULL, iax2_process_thread, thread)) { ast_log(LOG_WARNING, "Failed to create new thread!\n"); ast_mutex_destroy(&thread->lock); ast_cond_destroy(&thread->cond); + ast_mutex_unlock(&thread->init_lock); ast_mutex_destroy(&thread->init_lock); ast_cond_destroy(&thread->init_cond); ast_free(thread); thread = NULL; continue; } + /* Wait for the thread to be ready */ + ast_cond_wait(&thread->init_cond, &thread->init_lock); + + /* Done with init_lock */ + ast_mutex_unlock(&thread->init_lock); + AST_LIST_LOCK(&idle_list); AST_LIST_INSERT_TAIL(&idle_list, thread, list); AST_LIST_UNLOCK(&idle_list);