diff options
author | Richard Mudgett <rmudgett@digium.com> | 2013-02-14 19:52:14 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2013-02-14 19:52:14 +0000 |
commit | d3811a2352c2144a7a7470ee9064e49051b15e96 (patch) | |
tree | 070d9399480e6c2fc457b811beb322a3ec9a7de5 /main | |
parent | fffcdb0361153c4bd277690ff51d4a45fff66c4b (diff) |
End stuck DTMF if AST_SOFTHANGUP_ASYNCGOTO because it isn't a real hangup.
It doesn't hurt to check AST_SOFTHANGUP_UNBRIDGE either, but it should not
be set outside of a bridge.
(issue ASTERISK-20492)
........
Merged revisions 381466 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 381467 from http://svn.asterisk.org/svn/asterisk/branches/11
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@381469 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r-- | main/features.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/main/features.c b/main/features.c index cc0e2acea..0224e7841 100644 --- a/main/features.c +++ b/main/features.c @@ -4276,9 +4276,12 @@ void ast_bridge_end_dtmf(struct ast_channel *chan, char digit, struct timeval st long duration; ast_channel_lock(chan); - dead = ast_test_flag(ast_channel_flags(chan), AST_FLAG_ZOMBIE) || ast_check_hangup(chan); + dead = ast_test_flag(ast_channel_flags(chan), AST_FLAG_ZOMBIE) + || (ast_channel_softhangup_internal_flag(chan) + & ~(AST_SOFTHANGUP_ASYNCGOTO | AST_SOFTHANGUP_UNBRIDGE)); ast_channel_unlock(chan); if (dead) { + /* Channel is a zombie or a real hangup. */ return; } |