diff options
-rw-r--r-- | apps/app_meetme.c | 1 | ||||
-rw-r--r-- | apps/app_queue.c | 1 | ||||
-rw-r--r-- | apps/app_rpt.c | 5 | ||||
-rw-r--r-- | channels/chan_h323.c | 2 | ||||
-rw-r--r-- | channels/chan_iax2.c | 7 | ||||
-rw-r--r-- | channels/chan_mgcp.c | 1 | ||||
-rw-r--r-- | channels/chan_sip.c | 2 | ||||
-rw-r--r-- | channels/chan_skinny.c | 1 | ||||
-rw-r--r-- | channels/chan_zap.c | 17 | ||||
-rw-r--r-- | main/cdr.c | 1 | ||||
-rw-r--r-- | main/http.c | 1 | ||||
-rw-r--r-- | main/manager.c | 1 | ||||
-rw-r--r-- | main/pbx.c | 7 | ||||
-rw-r--r-- | pbx/pbx_dundi.c | 6 | ||||
-rw-r--r-- | pbx/pbx_spool.c | 2 |
15 files changed, 47 insertions, 8 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c index 444f3c7b9..0e54aa4fc 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -1072,6 +1072,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c pthread_attr_init(&conf->attr); pthread_attr_setdetachstate(&conf->attr, PTHREAD_CREATE_DETACHED); ast_pthread_create_background(&conf->recordthread, &conf->attr, recordthread, conf); + pthread_attr_destroy(&conf->attr); } time(&user->jointime); diff --git a/apps/app_queue.c b/apps/app_queue.c index 5442e24c7..9bb6b5b7d 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -609,6 +609,7 @@ static int statechange_queue(const char *dev, int state, void *ign) ast_log(LOG_WARNING, "Failed to create update thread!\n"); free(sc); } + pthread_attr_destroy(&attr); return 0; } diff --git a/apps/app_rpt.c b/apps/app_rpt.c index 9872051cb..34732a25a 100644 --- a/apps/app_rpt.c +++ b/apps/app_rpt.c @@ -2613,6 +2613,7 @@ pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); res = ast_pthread_create(&tele->threadid,&attr,rpt_tele_thread,(void *) tele); + pthread_attr_destroy(&attr); if(res < 0){ rpt_mutex_lock(&myrpt->lock); remque((struct qlem *) tele); /* We don't like stuck transmitters, remove it from the queue */ @@ -3380,6 +3381,7 @@ static int function_autopatchup(struct rpt *myrpt, char *param, char *digitbuf, pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); ast_pthread_create(&myrpt->rpt_call_thread,&attr,rpt_call,(void *) myrpt); + pthread_attr_destroy(&attr); return DC_COMPLETE; } @@ -5936,6 +5938,7 @@ char cmd[MAXDTMF+1] = ""; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); ast_pthread_create(&myrpt->rpt_call_thread,&attr,rpt_call,(void *)myrpt); + pthread_attr_destroy(&attr); return; } } @@ -7219,6 +7222,7 @@ struct ast_config *cfg; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); ast_pthread_create(&rpt_vars[i].rpt_thread,&attr,rpt,(void *) &rpt_vars[i]); + pthread_attr_destroy(&attr); } usleep(500000); for(;;) @@ -7254,6 +7258,7 @@ struct ast_config *cfg; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); ast_pthread_create(&rpt_vars[i].rpt_thread,&attr,rpt,(void *) &rpt_vars[i]); + pthread_attr_destroy(&attr); ast_log(LOG_WARNING, "rpt_thread restarted on node %s\n", rpt_vars[i].name); } diff --git a/channels/chan_h323.c b/channels/chan_h323.c index 01d9259a9..6557623e8 100644 --- a/channels/chan_h323.c +++ b/channels/chan_h323.c @@ -2524,8 +2524,10 @@ static int restart_monitor(void) monitor_thread = AST_PTHREADT_NULL; ast_mutex_unlock(&monlock); ast_log(LOG_ERROR, "Unable to start monitor thread.\n"); + pthread_attr_destroy(&attr); return -1; } + pthread_attr_destroy(&attr); } ast_mutex_unlock(&monlock); return 0; diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 47604758e..29031796d 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -6059,6 +6059,8 @@ static void spawn_dp_lookup(int callno, const char *context, const char *calledn if (ast_pthread_create(&newthread, &attr, dp_lookup_thread, dpr)) { ast_log(LOG_WARNING, "Unable to start lookup thread!\n"); } + + pthread_attr_destroy(&attr); } struct iax_dual { @@ -6133,8 +6135,11 @@ static int iax_park(struct ast_channel *chan1, struct ast_channel *chan2) d->chan1 = chan1m; d->chan2 = chan2m; - if (!ast_pthread_create_background(&th, &attr, iax_park_thread, d)) + if (!ast_pthread_create_background(&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 78d1948f0..80e0bb07f 100644 --- a/channels/chan_mgcp.c +++ b/channels/chan_mgcp.c @@ -2995,6 +2995,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 fd71c464b..ce4a883a6 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12629,8 +12629,10 @@ static int sip_park(struct ast_channel *chan1, struct ast_channel *chan2, struct /* 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() */ + pthread_attr_destroy(&attr); return 0; } + pthread_attr_destroy(&attr); } return -1; } diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index de321b885..1ba7f126a 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -4302,6 +4302,7 @@ static void *accept_thread(void *ignore) if (skinnydebug) 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 1420b6037..56421ca8a 100644 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -3591,9 +3591,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); mysig = p->sig; if (p->outsigmod > -1) @@ -4178,6 +4175,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)) { @@ -4195,7 +4194,8 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) !ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0); } p->subs[SUB_THREEWAY].needhold = 1; - } + } + pthread_attr_destroy(&attr); } } else { /* Already have a 3 way call */ @@ -6686,6 +6686,7 @@ static int handle_init_event(struct zt_pvt *i, int event) "interface %d\n", i->channel); } } + pthread_attr_destroy(&attr); return 0; } @@ -6908,10 +6909,12 @@ static int restart_monitor(void) if (ast_pthread_create_background(&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; } @@ -8248,9 +8251,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 */ @@ -8741,6 +8741,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", @@ -8756,6 +8758,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 */ diff --git a/main/cdr.c b/main/cdr.c index 02794ddf0..6aef9b51e 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -860,6 +860,7 @@ void ast_cdr_submit_batch(int shutdown) if (option_debug) ast_log(LOG_DEBUG, "CDR multi-threaded batch processing begins now\n"); } + pthread_attr_destroy(&attr); } } diff --git a/main/http.c b/main/http.c index ce6a690e5..80841a223 100644 --- a/main/http.c +++ b/main/http.c @@ -539,6 +539,7 @@ static void *http_root(void *data) fclose(ser->f); free(ser); } + pthread_attr_destroy(&attr); } else { ast_log(LOG_WARNING, "fdopen failed!\n"); close(ser->fd); diff --git a/main/manager.c b/main/manager.c index 14019986c..0cbdeb781 100644 --- a/main/manager.c +++ b/main/manager.c @@ -1752,6 +1752,7 @@ static int action_originate(struct mansession *s, const struct message *m) } else { res = 0; } + pthread_attr_destroy(&attr); } } else if (!ast_strlen_zero(app)) { res = ast_pbx_outgoing_app(tech, AST_FORMAT_SLINEAR, data, to, app, appdata, &reason, 1, l, n, vars, account, NULL); diff --git a/main/pbx.c b/main/pbx.c index 41ad2312d..230b06b9f 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -2585,8 +2585,10 @@ enum ast_pbx_result ast_pbx_start(struct ast_channel *c) pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (ast_pthread_create(&t, &attr, pbx_thread, c)) { ast_log(LOG_WARNING, "Failed to create new channel thread\n"); + pthread_attr_destroy(&attr); return AST_PBX_FAILED; } + pthread_attr_destroy(&attr); return AST_PBX_SUCCESS; } @@ -5048,8 +5050,10 @@ int ast_pbx_outgoing_exten(const char *type, int format, void *data, int timeout } ast_hangup(chan); res = -1; + pthread_attr_destroy(&attr); goto outgoing_exten_cleanup; } + pthread_attr_destroy(&attr); res = 0; } outgoing_exten_cleanup: @@ -5151,6 +5155,7 @@ int ast_pbx_outgoing_app(const char *type, int format, void *data, int timeout, if (locked_channel) *locked_channel = chan; } + pthread_attr_destroy(&attr); } } } else { @@ -5209,11 +5214,13 @@ int ast_pbx_outgoing_app(const char *type, int format, void *data, int timeout, ast_channel_unlock(chan); ast_hangup(chan); res = -1; + pthread_attr_destroy(&attr); goto outgoing_app_cleanup; } else { if (locked_channel) *locked_channel = chan; } + pthread_attr_destroy(&attr); res = 0; } outgoing_app_cleanup: diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c index 99295826e..007c65d13 100644 --- a/pbx/pbx_dundi.c +++ b/pbx/pbx_dundi.c @@ -783,8 +783,10 @@ static int dundi_answer_entity(struct dundi_transaction *trans, struct dundi_ies memset(&ied, 0, sizeof(ied)); dundi_ie_append_cause(&ied, DUNDI_IE_CAUSE, DUNDI_CAUSE_GENERAL, "Out of threads"); dundi_send(trans, DUNDI_COMMAND_EIDRESPONSE, 0, 1, &ied); + pthread_attr_destroy(&attr); return -1; } + pthread_attr_destroy(&attr); } else { ast_log(LOG_WARNING, "Out of memory!\n"); memset(&ied, 0, sizeof(ied)); @@ -1009,8 +1011,10 @@ static int dundi_prop_precache(struct dundi_transaction *trans, struct dundi_ies memset(&ied, 0, sizeof(ied)); dundi_ie_append_cause(&ied, DUNDI_IE_CAUSE, DUNDI_CAUSE_GENERAL, "Out of threads"); dundi_send(trans, DUNDI_COMMAND_PRECACHERP, 0, 1, &ied); + pthread_attr_destroy(&attr); return -1; } + pthread_attr_destroy(&attr); } else { ast_log(LOG_WARNING, "Out of memory!\n"); memset(&ied, 0, sizeof(ied)); @@ -1095,8 +1099,10 @@ static int dundi_answer_query(struct dundi_transaction *trans, struct dundi_ies memset(&ied, 0, sizeof(ied)); dundi_ie_append_cause(&ied, DUNDI_IE_CAUSE, DUNDI_CAUSE_GENERAL, "Out of threads"); dundi_send(trans, DUNDI_COMMAND_DPRESPONSE, 0, 1, &ied); + pthread_attr_destroy(&attr); return -1; } + pthread_attr_destroy(&attr); } else { ast_log(LOG_WARNING, "Out of memory!\n"); memset(&ied, 0, sizeof(ied)); diff --git a/pbx/pbx_spool.c b/pbx/pbx_spool.c index 2293ca9ab..4d6e955d8 100644 --- a/pbx/pbx_spool.c +++ b/pbx/pbx_spool.c @@ -367,6 +367,7 @@ static void launch_service(struct outgoing *o) ast_log(LOG_WARNING, "Unable to create thread :( (returned error: %d)\n", ret); free_outgoing(o); } + pthread_attr_destroy(&attr); } static int scan_service(char *fn, time_t now, time_t atime) @@ -499,6 +500,7 @@ static int load_module(void) ast_log(LOG_WARNING, "Unable to create thread :( (returned error: %d)\n", ret); return -1; } + pthread_attr_destroy(&attr); return 0; } |