[asterisk-commits] jpeeler: branch jpeeler/bug13173 r151322 - /team/jpeeler/bug13173/apps/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Oct 20 15:57:04 CDT 2008
Author: jpeeler
Date: Mon Oct 20 15:57:03 2008
New Revision: 151322
URL: http://svn.digium.com/view/asterisk?view=rev&rev=151322
Log:
fix potential memory leak, considering playing conference part sound in announce thread to avoid delaying hangup
Modified:
team/jpeeler/bug13173/apps/app_meetme.c
Modified: team/jpeeler/bug13173/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/jpeeler/bug13173/apps/app_meetme.c?view=diff&rev=151322&r1=151321&r2=151322
==============================================================================
--- team/jpeeler/bug13173/apps/app_meetme.c (original)
+++ team/jpeeler/bug13173/apps/app_meetme.c Mon Oct 20 15:57:03 2008
@@ -1274,7 +1274,7 @@
pthread_join(conf->announcethread, NULL);
ast_clear_flag(conf->chan, AST_FLAG_BLOCKING);
while ((item = AST_LIST_REMOVE_HEAD(&conf->announcelist, list))) {
- ast_log(LOG_NOTICE, "freeing item\n");
+ ast_log(LOG_NOTICE, "jpeeler: freeing item path=%s\n", item->namerecloc);
free(item);
}
}
@@ -1406,12 +1406,9 @@
if (AST_LIST_EMPTY(&conf->announcelist))
ast_cond_wait(&conf->announcelist_addition, &conf->announcelist.lock);
next = AST_LIST_FIRST(&conf->announcelist);
- AST_LIST_HEAD_INIT_NOLOCK(&conf->announcelist);
AST_LIST_UNLOCK(&conf->announcelist);
while ((current = next)) {
- next = AST_LIST_NEXT(current, list);
-
if (ast_fileexists(current->namerecloc, NULL, NULL)) {
if ((current->confchan) && (current->confusers > 1)) {
if (!ast_streamfile(current->confchan, current->namerecloc, current->language))
@@ -1421,7 +1418,12 @@
}
ast_filedelete(current->namerecloc, NULL);
}
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
+ next = AST_LIST_NEXT(current, list);
+ AST_LIST_REMOVE_HEAD(&conf->announcelist, list);
+ast_log(LOG_NOTICE, "jpeeler: freeing item path=%s\n", current->namerecloc);
free(current);
+ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
}
}
@@ -2331,13 +2333,13 @@
if (!(confflags & CONFFLAG_QUIET) && !(confflags & CONFFLAG_MONITOR) && !(confflags & CONFFLAG_ADMIN))
conf_play(chan, conf, LEAVE);
- if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW))) {
+ if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW)) && conf->users > 1) {
struct announce_listitem *item = ast_calloc(1, sizeof(*item));
-ast_log(LOG_NOTICE, "adding item\n");
ast_copy_string(item->namerecloc, user->namerecloc, sizeof(item->namerecloc));
ast_copy_string(item->language, chan->language, sizeof(item->language));
item->confchan = conf->chan;
item->confusers = conf->users;
+ast_log(LOG_NOTICE, "jpeeler: adding item with path=%s\n", item->namerecloc);
AST_LIST_LOCK(&conf->announcelist);
AST_LIST_INSERT_TAIL(&conf->announcelist, item, list);
ast_cond_signal(&conf->announcelist_addition);
More information about the asterisk-commits
mailing list