diff options
Diffstat (limited to 'main/pbx.c')
-rw-r--r-- | main/pbx.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/main/pbx.c b/main/pbx.c index 4c95b278f..ec96344cb 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -9776,6 +9776,8 @@ struct pbx_outgoing { char exten[AST_MAX_EXTENSION]; /*! \brief Dialplan priority */ int priority; + /*! \brief Result of the dial operation when dialed is set */ + int dial_res; /*! \brief Set when dialing is completed */ unsigned int dialed:1; /*! \brief Set when execution is completed */ @@ -9806,6 +9808,7 @@ static void *pbx_outgoing_exec(void *data) /* Notify anyone interested that dialing is complete */ ast_mutex_lock(&outgoing->lock); res = ast_dial_run(outgoing->dial, NULL, 0); + outgoing->dial_res = res; outgoing->dialed = 1; ast_cond_signal(&outgoing->cond); ast_mutex_unlock(&outgoing->lock); @@ -9978,6 +9981,11 @@ static int pbx_outgoing_attempt(const char *type, struct ast_format_cap *cap, co } while (!outgoing->dialed) { ast_cond_wait(&outgoing->cond, &outgoing->lock); + + if (outgoing->dial_res != AST_DIAL_RESULT_ANSWERED) { + /* The dial operation failed. */ + return -1; + } } if (channel && *channel) { ast_channel_lock(*channel); |