From: Mark Spencer Date: Fri, 9 Jul 2004 10:57:43 +0000 (+0000) Subject: Swap states early in masquerade process (bug #1987) X-Git-Tag: 1.0.0-rc1~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=611da9b699c01df8623b71f1529f03fccdd58630;p=thirdparty%2Fasterisk.git Swap states early in masquerade process (bug #1987) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3412 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channel.c b/channel.c index c2ccfdc913..16935f6843 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 */