diff options
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_iax2.c | 13 | ||||
-rw-r--r-- | channels/chan_sip.c | 7 | ||||
-rw-r--r-- | channels/chan_skinny.c | 11 |
3 files changed, 19 insertions, 12 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 6243eefc0..b1dc0bff2 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -6049,16 +6049,20 @@ static void spawn_dp_lookup(int callno, const char *context, const char *calledn { pthread_t newthread; struct dpreq_data *dpr; + pthread_attr_t attr; if (!(dpr = ast_calloc(1, sizeof(*dpr)))) return; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + dpr->callno = callno; ast_copy_string(dpr->context, context, sizeof(dpr->context)); ast_copy_string(dpr->callednum, callednum, sizeof(dpr->callednum)); if (callerid) dpr->callerid = ast_strdup(callerid); - if (ast_pthread_create(&newthread, NULL, dp_lookup_thread, dpr)) { + if (ast_pthread_create(&newthread, &attr, dp_lookup_thread, dpr)) { ast_log(LOG_WARNING, "Unable to start lookup thread!\n"); } } @@ -6128,9 +6132,14 @@ static int iax_park(struct ast_channel *chan1, struct ast_channel *chan2) return -1; } if ((d = ast_calloc(1, sizeof(*d)))) { + pthread_attr_t attr; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + d->chan1 = chan1m; d->chan2 = chan2m; - if (!ast_pthread_create_background(&th, NULL, iax_park_thread, d)) + if (!ast_pthread_create_background(&th, &attr, iax_park_thread, d)) return 0; free(d); } diff --git a/channels/chan_sip.c b/channels/chan_sip.c index b9a7175e0..391dfec6a 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12539,12 +12539,17 @@ static int sip_park(struct ast_channel *chan1, struct ast_channel *chan2, struct return -1; } if ((d = ast_calloc(1, sizeof(*d)))) { + pthread_attr_t attr; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + /* Save original request for followup */ copy_request(&d->req, req); d->chan1 = transferee; /* Transferee */ d->chan2 = transferer; /* Transferer */ d->seqno = seqno; - if (ast_pthread_create_background(&th, NULL, sip_park_thread, d) < 0) { + if (ast_pthread_create_background(&th, &attr, sip_park_thread, d) < 0) { /* Could not start thread */ free(d); /* We don't need it anymore. If thread is created, d will be free'd by sip_park_thread() */ diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 57ec2a5bc..0552a5c84 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -749,7 +749,6 @@ static struct in_addr __ourip; struct ast_hostent ahp; struct hostent *hp; static int skinnysock = -1; -static pthread_t tcp_thread; static pthread_t accept_t; static char context[AST_MAX_CONTEXT] = "default"; static char language[MAX_LANGUAGE] = ""; @@ -4274,6 +4273,7 @@ static void *accept_thread(void *ignore) struct protoent *p; int arg = 1; pthread_attr_t attr; + pthread_t tcp_thread; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); @@ -4302,7 +4302,7 @@ static void *accept_thread(void *ignore) sessions = s; ast_mutex_unlock(&sessionlock); - if (ast_pthread_create(&tcp_thread, NULL, skinny_session, s)) { + if (ast_pthread_create(&tcp_thread, &attr, skinny_session, s)) { destroy_session(s); } } @@ -4684,13 +4684,6 @@ static int unload_module(void) monitor_thread = AST_PTHREADT_STOP; ast_mutex_unlock(&monlock); - if (tcp_thread && (tcp_thread != AST_PTHREADT_STOP)) { - pthread_cancel(tcp_thread); - pthread_kill(tcp_thread, SIGURG); - pthread_join(tcp_thread, NULL); - } - tcp_thread = AST_PTHREADT_STOP; - ast_mutex_lock(&netlock); if (accept_t && (accept_t != AST_PTHREADT_STOP)) { pthread_cancel(accept_t); |