]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
This fixes 9246, where channel variables are not available in the 'h' exten, on a...
authorSteve Murphy <murf@digium.com>
Tue, 19 Jun 2007 18:07:59 +0000 (18:07 +0000)
committerSteve Murphy <murf@digium.com>
Tue, 19 Jun 2007 18:07:59 +0000 (18:07 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70053 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channel.c

index 5a3afcf2abfa23cb0ca4a1f087527ae085711247..10ef85fc2f780bc2b69896102e19d843d948a23d 100644 (file)
--- a/channel.c
+++ b/channel.c
@@ -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)
 {
+       struct ast_var_t *current, *newvar;
        /* Append variables from clone channel into original channel */
        /* XXX Is this always correct?  We have to in order to keep MACROS working XXX */
        if (AST_LIST_FIRST(&clone->varshead))
                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 */
@@ -3125,7 +3135,6 @@ int ast_do_masquerade(struct ast_channel *original)
        /* Drop group from original */
        ast_app_group_update(clone, original);
        clone_variables(original, clone);
-       AST_LIST_HEAD_INIT_NOLOCK(&clone->varshead);
        /* Presense of ADSI capable CPE follows clone */
        original->adsicpe = clone->adsicpe;
        /* Bridge remains the same */