Fix several unreleased mutex locks that cause problem with processing calls
authorIgor Goncharovskiy <igor.goncharovsky@gmail.com>
Tue, 5 Mar 2013 03:53:44 +0000 (03:53 +0000)
committerIgor Goncharovskiy <igor.goncharovsky@gmail.com>
Tue, 5 Mar 2013 03:53:44 +0000 (03:53 +0000)
Reported by: Daniel Bohling
Tested by: Daniel Bohling

(Closes issue ASTERISK-21119)
........

Merged revisions 382409 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 382410 from http://svn.asterisk.org/svn/asterisk/branches/11

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

channels/chan_unistim.c

index 80dad41..3c9d5d6 100644 (file)
@@ -4647,6 +4647,7 @@ static struct unistimsession *channel_to_session(struct ast_channel *ast)
        ast_mutex_lock(&sub->parent->parent->lock);
        if (!sub->parent->parent->session) {
                ast_log(LOG_WARNING, "Unistim callback function called without a session\n");
+               ast_mutex_unlock(&sub->parent->parent->lock);
                return NULL;
        }
        ast_mutex_unlock(&sub->parent->parent->lock);
@@ -5080,6 +5081,7 @@ static int unistim_fixup(struct ast_channel *oldchan, struct ast_channel *newcha
        if (p->owner != oldchan) {
                ast_log(LOG_WARNING, "old channel wasn't %s (%p) but was %s (%p)\n",
                                ast_channel_name(oldchan), oldchan, ast_channel_name(p->owner), p->owner);
+               ast_mutex_unlock(&p->lock);
                return -1;
        }