From a20e669975e85920edc1fb8d33c4fe7b514bfa1a Mon Sep 17 00:00:00 2001 From: kpfleming Date: Thu, 4 Jan 2007 23:50:15 +0000 Subject: [PATCH] create the IAX2 processing threads as background threads so they will use smaller stacks when we create a dynamic thread, put it on the dynamic_list right away so we don't lose track of it git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@49581 614ede4d-c843-0410-af14-a771ab80d22e --- channels/chan_iax2.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 2037a3a40..ec3c7be5b 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -855,24 +855,21 @@ static struct iax2_thread *find_idle_thread(void) /* If no idle thread is available from the regular list, try dynamic */ if (thread == NULL) { AST_LIST_LOCK(&dynamic_list); - thread = AST_LIST_FIRST(&dynamic_list); - if (thread != NULL) { - AST_LIST_REMOVE(&dynamic_list, thread, list); - } + thread = AST_LIST_REMOVE_HEAD(&dynamic_list, list); /* Make sure we absolutely have a thread... if not, try to make one if allowed */ if (thread == NULL && iaxmaxthreadcount > iaxdynamicthreadcount) { /* We need to MAKE a thread! */ - thread = ast_calloc(1, sizeof(*thread)); - if (thread != NULL) { + if ((thread = ast_calloc(1, sizeof(*thread)))) { thread->threadnum = iaxdynamicthreadcount; thread->type = IAX_TYPE_DYNAMIC; ast_mutex_init(&thread->lock); ast_cond_init(&thread->cond, NULL); - if (ast_pthread_create(&thread->threadid, NULL, iax2_process_thread, thread)) { + if (ast_pthread_create_background(&thread->threadid, NULL, iax2_process_thread, thread)) { free(thread); thread = NULL; } else { /* All went well and the thread is up, so increment our count */ + AST_LIST_INSERT_TAIL(&dynamic_list, thread, list); iaxdynamicthreadcount++; } } @@ -8110,7 +8107,7 @@ static int start_network_thread(void) thread->threadnum = ++threadcount; ast_mutex_init(&thread->lock); ast_cond_init(&thread->cond, NULL); - if (ast_pthread_create(&thread->threadid, NULL, iax2_process_thread, thread)) { + if (ast_pthread_create_background(&thread->threadid, NULL, iax2_process_thread, thread)) { ast_log(LOG_WARNING, "Failed to create new thread!\n"); free(thread); thread = NULL; -- 2.11.4.GIT