diff options
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_h323.c | 2 | ||||
-rw-r--r-- | channels/chan_iax2.c | 6 | ||||
-rw-r--r-- | channels/chan_mgcp.c | 1 | ||||
-rw-r--r-- | channels/chan_sip.c | 5 | ||||
-rw-r--r-- | channels/chan_skinny.c | 1 | ||||
-rw-r--r-- | channels/chan_zap.c | 17 |
6 files changed, 23 insertions, 9 deletions
diff --git a/channels/chan_h323.c b/channels/chan_h323.c index 1b4a616a5..b2d4d8184 100644 --- a/channels/chan_h323.c +++ b/channels/chan_h323.c @@ -1642,9 +1642,11 @@ static int restart_monitor(void) /* Start a new monitor */ if (ast_pthread_create(&monitor_thread, &attr, do_monitor, NULL) < 0) { ast_mutex_unlock(&monlock); + pthread_attr_destroy(&attr); ast_log(LOG_ERROR, "Unable to start monitor thread.\n"); return -1; } + pthread_attr_destroy(&attr); } ast_mutex_unlock(&monlock); diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 76592002a..eca422dfb 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -6224,6 +6224,7 @@ static void spawn_dp_lookup(int callno, char *context, char *callednum, char *ca if (ast_pthread_create(&newthread, &attr, dp_lookup_thread, dpr)) { ast_log(LOG_WARNING, "Unable to start lookup thread!\n"); } + pthread_attr_destroy(&attr); } else ast_log(LOG_WARNING, "Out of memory!\n"); } @@ -6304,8 +6305,11 @@ static int iax_park(struct ast_channel *chan1, struct ast_channel *chan2) memset(d, 0, sizeof(*d)); d->chan1 = chan1m; d->chan2 = chan2m; - if (!ast_pthread_create(&th, &attr, iax_park_thread, d)) + if (!ast_pthread_create(&th, &attr, iax_park_thread, d)) { + pthread_attr_destroy(&attr); return 0; + } + pthread_attr_destroy(&attr); free(d); } return -1; diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c index 14b187426..de2d6a400 100644 --- a/channels/chan_mgcp.c +++ b/channels/chan_mgcp.c @@ -2963,6 +2963,7 @@ static void handle_hd_hf(struct mgcp_subchannel *sub, char *ev) /*ast_queue_control(sub->owner, AST_CONTROL_ANSWER);*/ } } + pthread_attr_destroy(&attr); } static int handle_request(struct mgcp_subchannel *sub, struct mgcp_request *req, struct sockaddr_in *sin) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index a316065f2..5e1613275 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -10402,8 +10402,11 @@ static int sip_park(struct ast_channel *chan1, struct ast_channel *chan2, struct copy_request(&d->req, req); d->chan1 = chan1m; d->chan2 = chan2m; - if (!ast_pthread_create(&th, &attr, sip_park_thread, d)) + if (!ast_pthread_create(&th, &attr, sip_park_thread, d)) { + pthread_attr_destroy(&attr); return 0; + } + pthread_attr_destroy(&attr); free(d); } return -1; diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index ca55bfcad..3cfd9d646 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -2977,6 +2977,7 @@ static void *accept_thread(void *ignore) ast_verbose("killing accept thread\n"); } close(as); + pthread_attr_destroy(&attr); return 0; } diff --git a/channels/chan_zap.c b/channels/chan_zap.c index e8a885791..45ebb0c78 100644 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -3668,9 +3668,6 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) pthread_attr_t attr; struct ast_channel *chan; - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - index = zt_get_index(ast, p, 0); p->subs[index].f.frametype = AST_FRAME_NULL; p->subs[index].f.datalen = 0; @@ -4199,6 +4196,8 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) if (res) ast_log(LOG_WARNING, "Unable to start dial recall tone on channel %d\n", p->channel); p->owner = chan; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (!chan) { ast_log(LOG_WARNING, "Cannot allocate new structure on channel %d\n", p->channel); } else if (ast_pthread_create(&threadid, &attr, ss_thread, chan)) { @@ -4212,7 +4211,8 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) /* Start music on hold if appropriate */ if (ast_bridged_channel(p->subs[SUB_THREEWAY].owner)) ast_moh_start(ast_bridged_channel(p->subs[SUB_THREEWAY].owner), NULL); - } + } + pthread_attr_destroy(&attr); } } else { /* Already have a 3 way call */ @@ -6579,6 +6579,7 @@ static int handle_init_event(struct zt_pvt *i, int event) "interface %d\n", i->channel); } } + pthread_attr_destroy(&attr); return 0; } @@ -6838,10 +6839,12 @@ static int restart_monitor(void) if (ast_pthread_create(&monitor_thread, &attr, do_monitor, NULL) < 0) { ast_mutex_unlock(&monlock); ast_log(LOG_ERROR, "Unable to start monitor thread.\n"); + pthread_attr_destroy(&attr); return -1; } } ast_mutex_unlock(&monlock); + pthread_attr_destroy(&attr); return 0; } @@ -8193,9 +8196,6 @@ static void *pri_dchannel(void *vpri) char plancallingani[256]; char calledtonstr[10]; - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - gettimeofday(&lastidle, NULL); if (!ast_strlen_zero(pri->idledial) && !ast_strlen_zero(pri->idleext)) { /* Need to do idle dialing, check to be sure though */ @@ -8683,6 +8683,8 @@ static void *pri_dchannel(void *vpri) pbx_builtin_setvar_helper(c, "PRIREDIRECTREASON", redirectingreason2str(e->ring.redirectingreason)); ast_mutex_lock(&pri->lock); + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (c && !ast_pthread_create(&threadid, &attr, ss_thread, c)) { if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Accepting overlap call from '%s' to '%s' on channel %d/%d, span %d\n", @@ -8698,6 +8700,7 @@ static void *pri_dchannel(void *vpri) pri->pvts[chanpos]->call = NULL; } } + pthread_attr_destroy(&attr); } else { ast_mutex_unlock(&pri->lock); /* Release PRI lock while we create the channel */ |