[asterisk-commits] murf: trunk r70063 - in /trunk: ./ main/channel.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Jun 19 13:31:30 CDT 2007


Author: murf
Date: Tue Jun 19 13:31:29 2007
New Revision: 70063

URL: http://svn.digium.com/view/asterisk?view=rev&rev=70063
Log:
Merged revisions 70062 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r70062 | murf | 2007-06-19 12:23:23 -0600 (Tue, 19 Jun 2007) | 9 lines

Merged revisions 70053 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r70053 | murf | 2007-06-19 12:07:59 -0600 (Tue, 19 Jun 2007) | 1 line

This fixes 9246, where channel variables are not available in the 'h' exten, on a 'ZOMBIE' channel. The fix is to consolidate the channel variables during a masquerade, and then copy the merged variables back onto the clone, so the zombie has the same vars that the 'original' has.
........

................

Modified:
    trunk/   (props changed)
    trunk/main/channel.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/main/channel.c
URL: http://svn.digium.com/view/asterisk/trunk/main/channel.c?view=diff&rev=70063&r1=70062&r2=70063
==============================================================================
--- trunk/main/channel.c (original)
+++ trunk/main/channel.c Tue Jun 19 13:31:29 2007
@@ -3385,10 +3385,20 @@
 */
 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);
+	}
 }
 
 /*!
@@ -3593,7 +3603,6 @@
 	AST_LIST_HEAD_INIT_NOLOCK(&clone->datastores);
 
 	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 */




More information about the asterisk-commits mailing list