void ast_change_name(struct ast_channel *chan, const char *newname)
{
/* We must re-link, as the hash value will change here. */
- ao2_unlink(channels, chan);
+ ao2_lock(channels);
ast_channel_lock(chan);
+ ao2_unlink(channels, chan);
__ast_change_name_nolink(chan, newname);
- ast_channel_unlock(chan);
ao2_link(channels, chan);
+ ast_channel_unlock(chan);
+ ao2_unlock(channels);
}
void ast_channel_inherit_variables(const struct ast_channel *parent, struct ast_channel *child)
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 */