@ -2940,10 +2940,20 @@ void ast_channel_inherit_variables(const struct ast_channel *parent, struct ast_
static void clone_variables ( struct ast_channel * original , struct ast_channel * clone )
static void clone_variables ( struct ast_channel * original , struct ast_channel * clone )
{
{
struct ast_var_t * current , * newvar ;
/* Append variables from clone channel into original channel */
/* Append variables from clone channel into original channel */
/* XXX Is this always correct? We have to in order to keep MACROS working XXX */
/* XXX Is this always correct? We have to in order to keep MACROS working XXX */
if ( AST_LIST_FIRST ( & clone - > varshead ) )
if ( AST_LIST_FIRST ( & clone - > varshead ) )
AST_LIST_APPEND_LIST ( & original - > varshead , & clone - > varshead , entries ) ;
AST_LIST_APPEND_LIST ( & original - > varshead , & clone - > varshead , entries ) ;
AST_LIST_HEAD_INIT_NOLOCK ( & clone - > varshead ) ;
/* then, dup the varshead list into the clone */
AST_LIST_TRAVERSE ( & original - > varshead , current , entries ) {
newvar = ast_var_assign ( current - > name , current - > value ) ;
if ( newvar )
AST_LIST_INSERT_TAIL ( & clone - > varshead , newvar , entries ) ;
}
}
}
/*--- ast_do_masquerade: Masquerade a channel */
/*--- ast_do_masquerade: Masquerade a channel */
@ -3125,7 +3135,6 @@ int ast_do_masquerade(struct ast_channel *original)
/* Drop group from original */
/* Drop group from original */
ast_app_group_update ( clone , original ) ;
ast_app_group_update ( clone , original ) ;
clone_variables ( original , clone ) ;
clone_variables ( original , clone ) ;
AST_LIST_HEAD_INIT_NOLOCK ( & clone - > varshead ) ;
/* Presense of ADSI capable CPE follows clone */
/* Presense of ADSI capable CPE follows clone */
original - > adsicpe = clone - > adsicpe ;
original - > adsicpe = clone - > adsicpe ;
/* Bridge remains the same */
/* Bridge remains the same */