From 611da9b699c01df8623b71f1529f03fccdd58630 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Fri, 9 Jul 2004 10:57:43 +0000 Subject: Swap states early in masquerade process (bug #1987) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3412 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channel.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'channel.c') diff --git a/channel.c b/channel.c index c2ccfdc91..16935f684 100755 --- a/channel.c +++ b/channel.c @@ -2152,6 +2152,7 @@ int ast_do_masquerade(struct ast_channel *original) { int x,i; int res=0; + int origstate; char *tmp; struct ast_var_t *varptr; struct ast_frame *cur, *prev; @@ -2234,6 +2235,14 @@ int ast_do_masquerade(struct ast_channel *original) clone->_softhangup = AST_SOFTHANGUP_DEV; + /* And of course, so does our current state. Note we need not + call ast_setstate since the event manager doesn't really consider + these separate. We do this early so that the clone has the proper + state of the original channel. */ + origstate = original->_state; + original->_state = clone->_state; + clone->_state = origstate; + if (clone->pvt->fixup){ res = clone->pvt->fixup(original, clone); if (res) @@ -2302,11 +2311,6 @@ int ast_do_masquerade(struct ast_channel *original) /* Our native formats are different now */ original->nativeformats = clone->nativeformats; - - /* And of course, so does our current state. Note we need not - call ast_setstate since the event manager doesn't really consider - these separate */ - original->_state = clone->_state; /* Context, extension, priority, app data, jump table, remain the same */ /* pvt switches. pbx stays the same, as does next */ -- cgit v1.2.3