[asterisk-commits] rmudgett: trunk r366242 - in /trunk: ./ main/channel.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu May 10 18:49:12 CDT 2012


Author: rmudgett
Date: Thu May 10 18:49:07 2012
New Revision: 366242

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=366242
Log:
* Made ast_change_name() hold the channels container lock while changing the channel name.

* Eliminate redundant list not empty check in clone_variables().
........

Merged revisions 366240 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 366241 from http://svn.asterisk.org/svn/asterisk/branches/10

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

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

Modified: trunk/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/channel.c?view=diff&rev=366242&r1=366241&r2=366242
==============================================================================
--- trunk/main/channel.c (original)
+++ trunk/main/channel.c Thu May 10 18:49:07 2012
@@ -6167,11 +6167,13 @@
 void ast_change_name(struct ast_channel *chan, const char *newname)
 {
 	/* We must re-link, as the hash value will change here. */
+	ao2_lock(channels);
+	ast_channel_lock(chan);
 	ao2_unlink(channels, chan);
-	ast_channel_lock(chan);
 	__ast_change_name_nolink(chan, newname);
+	ao2_link(channels, chan);
 	ast_channel_unlock(chan);
-	ao2_link(channels, chan);
+	ao2_unlock(channels);
 }
 
 void ast_channel_inherit_variables(const struct ast_channel *parent, struct ast_channel *child)
@@ -6228,8 +6230,7 @@
 	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(ast_channel_varshead(clonechan)))
-		AST_LIST_APPEND_LIST(ast_channel_varshead(original), ast_channel_varshead(clonechan), entries);
+	AST_LIST_APPEND_LIST(ast_channel_varshead(original), ast_channel_varshead(clonechan), entries);
 
 	/* then, dup the varshead list into the clone */
 




More information about the asterisk-commits mailing list