]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Mark channel running the h exten with the soft-hangup flag.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 8 Dec 2011 17:50:22 +0000 (17:50 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 8 Dec 2011 17:50:22 +0000 (17:50 +0000)
When a bridge is broken, ast_bridge_call() might execute the h exten on
the calling channel.  However, that channel may not have been the channel
that broke the bridge by hanging up.  The channel executing the h exten
must be in a hung up state so things like AGI run in the correct mode.

* Make sure ast_bridge_call() marks the channel it is executing the h
exten on as hung up.  (The AST_SOFTHANGUP_APPUNLOAD flag is used so as to
match the pbx.c main dialplan execution loop when it executes the h
exten.)

(closes issue ASTERISK-18811)
Reported by: David Hajek
Patches:
      jira_asterisk_18811_v1.8.patch (license #5621) patch uploaded by rmudgett
Tested by: David Hajek, rmudgett

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@347595 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/features.c

index 2f2e4f39676d9f5d825eab6fc6bafe449e91ab5a..133daba87f1d859744cac163badcd9efe8c08368 100644 (file)
@@ -4278,7 +4278,13 @@ before_you_go:
                int  save_prio;
                int  found = 0; /* set if we find at least one match */
                int  spawn_error = 0;
-               
+
+               /*
+                * Make sure that the channel is marked as hungup since we are
+                * going to run the "h" exten on it.
+                */
+               ast_softhangup(chan, AST_SOFTHANGUP_APPUNLOAD);
+
                autoloopflag = ast_test_flag(chan, AST_FLAG_IN_AUTOLOOP);
                ast_set_flag(chan, AST_FLAG_IN_AUTOLOOP);
                if (bridge_cdr && ast_opt_end_cdr_before_h_exten) {