]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Don't leak references if we can't create a pseudo channel for mixing in MeetMe.
authorSean Bright <sean@malleable.com>
Fri, 28 Jan 2011 21:22:09 +0000 (21:22 +0000)
committerSean Bright <sean@malleable.com>
Fri, 28 Jan 2011 21:22:09 +0000 (21:22 +0000)
If there was a problem allocating a pseudo channel when building our meetme, we
weren't destroying our user container or destroying the mutexes that we created.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@304659 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c

index 8191df6eb4e3fdfb5e8012c9b708109cb555687a..963b729f23bc138d7fc4b469443ad976f731abc6 100644 (file)
@@ -1123,6 +1123,11 @@ static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin
                ast_log(LOG_WARNING, "Unable to open DAHDI pseudo device\n");
                if (cnf->fd >= 0)
                        close(cnf->fd);
+               ao2_ref(cnf->usercontainer, -1);
+               ast_mutex_destroy(&cnf->playlock);
+               ast_mutex_destroy(&cnf->listenlock);
+               ast_mutex_destroy(&cnf->recordthreadlock);
+               ast_mutex_destroy(&cnf->announcethreadlock);
                ast_free(cnf);
                cnf = NULL;
                goto cnfout;
@@ -1144,7 +1149,11 @@ static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin
                                ast_hangup(cnf->chan);
                        else
                                close(cnf->fd);
-
+                       ao2_ref(cnf->usercontainer, -1);
+                       ast_mutex_destroy(&cnf->playlock);
+                       ast_mutex_destroy(&cnf->listenlock);
+                       ast_mutex_destroy(&cnf->recordthreadlock);
+                       ast_mutex_destroy(&cnf->announcethreadlock);
                        ast_free(cnf);
                        cnf = NULL;
                        goto cnfout;
@@ -3429,6 +3438,8 @@ bailoutandtrynormal:
                snprintf(meetmesecs, sizeof(meetmesecs), "%d", (int) (time(NULL) - user->jointime));
                pbx_builtin_setvar_helper(chan, "MEETMESECS", meetmesecs);
 
+               /* ao2_ref(user, -1); */
+
                /* Return the RealTime bookid for CDR linking */
                if (rt_schedule) {
                        pbx_builtin_setvar_helper(chan, "MEETMEBOOKID", conf->bookid);