Swap states early in masquerade process (bug #1987)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3412 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2004-07-09 10:57:43 +00:00
parent 34ed331f82
commit 611da9b699

View File

@@ -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 */