If the caller of the originate API calls wants the channel ensure it has been request...
authorJoshua Colp <jcolp@digium.com>
Sun, 19 May 2013 00:49:15 +0000 (00:49 +0000)
committerJoshua Colp <jcolp@digium.com>
Sun, 19 May 2013 00:49:15 +0000 (00:49 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@389116 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/pbx.c

index 41a46fe..18778fa 100644 (file)
@@ -10115,6 +10115,8 @@ static int pbx_outgoing_attempt(const char *type, struct ast_format_cap *cap, co
 
        ao2_ref(outgoing, +1);
 
+       ast_mutex_lock(&outgoing->lock);
+
        if (ast_pthread_create_detached(&thread, NULL, pbx_outgoing_exec, outgoing)) {
                ast_log(LOG_WARNING, "Unable to spawn dialing thread for '%s/%s'\n", type, addr);
                if (channel) {
@@ -10125,8 +10127,7 @@ static int pbx_outgoing_attempt(const char *type, struct ast_format_cap *cap, co
        }
 
        /* Wait for dialing to complete */
-       if (synchronous) {
-               ast_mutex_lock(&outgoing->lock);
+       if (channel || synchronous) {
                if (channel) {
                        ast_channel_unlock(*channel);
                }
@@ -10136,18 +10137,17 @@ static int pbx_outgoing_attempt(const char *type, struct ast_format_cap *cap, co
                if (channel) {
                        ast_channel_lock(*channel);
                }
-               ast_mutex_unlock(&outgoing->lock);
        }
 
        /* Wait for execution to complete */
        if (synchronous > 1) {
-               ast_mutex_lock(&outgoing->lock);
                while (!outgoing->executed) {
                        ast_cond_wait(&outgoing->cond, &outgoing->lock);
                }
-               ast_mutex_unlock(&outgoing->lock);
        }
 
+       ast_mutex_unlock(&outgoing->lock);
+
        if (reason) {
                *reason = ast_dial_reason(outgoing->dial, 0);
        }