From 4d8c35abf228fe7ae1b2a3058bdc8ebacde5b8ff Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Sun, 19 May 2013 00:49:15 +0000 Subject: If the caller of the originate API calls wants the channel ensure it has been requested and dialed. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@389116 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/pbx.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'main/pbx.c') diff --git a/main/pbx.c b/main/pbx.c index 41a46fefe..18778fac7 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -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); } -- cgit v1.2.3