diff options
Diffstat (limited to 'apps/app_dial.c')
-rw-r--r-- | apps/app_dial.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c index 540f6621c..11591bdfb 100644 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -2151,6 +2151,24 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast return -1; } + if (ast_check_hangup_locked(chan)) { + /* + * Caller hung up before we could dial. If dial is executed + * within an AGI then the AGI has likely eaten all queued + * frames before executing the dial in DeadAGI mode. With + * the caller hung up and no pending frames from the caller's + * read queue, dial would not know that the call has hung up + * until a called channel answers. It is rather annoying to + * whoever just answered the non-existent call. + * + * Dial should not continue execution in DeadAGI mode, hangup + * handlers, or the h exten. + */ + ast_verb(3, "Caller hung up before dial.\n"); + pbx_builtin_setvar_helper(chan, "DIALSTATUS", "CANCEL"); + return -1; + } + parse = ast_strdupa(data); AST_STANDARD_APP_ARGS(args, parse); |