Properly hangup the original dialed channel, not the new channel that appeared from...
authorJoshua Colp <jcolp@digium.com>
Tue, 27 Feb 2007 22:17:42 +0000 (22:17 +0000)
committerJoshua Colp <jcolp@digium.com>
Tue, 27 Feb 2007 22:17:42 +0000 (22:17 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@57011 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_dial.c

index 2b20396..e83f80a 100644 (file)
@@ -428,6 +428,7 @@ static void do_forward(struct chanlist *o,
        struct cause_args *num, struct ast_flags *peerflags, int single)
 {
        char tmpchan[256];
+       struct ast_channel *original = o->chan;
        struct ast_channel *c = o->chan; /* the winner */
        struct ast_channel *in = num->chan; /* the input channel */
        char *stuff;
@@ -498,7 +499,7 @@ static void do_forward(struct chanlist *o,
                if (ast_call(c, tmpchan, 0)) {
                        ast_log(LOG_NOTICE, "Failed to dial on local channel for call forward to '%s'\n", tmpchan);
                        ast_clear_flag(o, DIAL_STILLGOING);     
-                       ast_hangup(c);
+                       ast_hangup(original);
                        c = o->chan = NULL;
                        num->nochan++;
                } else {
@@ -509,7 +510,7 @@ static void do_forward(struct chanlist *o,
                                ast_set_callerid(c, S_OR(in->macroexten, in->exten), get_cid_name(cidname, sizeof(cidname), in), NULL);
                        }
                        /* Hangup the original channel now, in case we needed it */
-                       ast_hangup(c);
+                       ast_hangup(original);
                }
        }
 }