Index: main/channel.c =================================================================== --- main/channel.c (revision 425610) +++ main/channel.c (working copy) @@ -6299,42 +6299,43 @@ void ast_channel_inherit_variables(const struct ast_channel *parent, struct ast_channel *child) { - struct ast_var_t *current, *newvar; + struct ast_var_t *current; + struct ast_var_t *newvar; const char *varname; + int vartype; AST_LIST_TRAVERSE(ast_channel_varshead((struct ast_channel *) parent), current, entries) { - int vartype = 0; - varname = ast_var_full_name(current); - if (!varname) + if (!varname) { continue; + } + vartype = 0; if (varname[0] == '_') { vartype = 1; - if (varname[1] == '_') + if (varname[1] == '_') { vartype = 2; + } } switch (vartype) { case 1: newvar = ast_var_assign(&varname[1], ast_var_value(current)); - if (newvar) { - AST_LIST_INSERT_TAIL(ast_channel_varshead(child), newvar, entries); - ast_debug(1, "Inheriting variable %s from %s to %s.\n", - ast_var_name(newvar), ast_channel_name(parent), ast_channel_name(child)); - } break; case 2: newvar = ast_var_assign(varname, ast_var_value(current)); - if (newvar) { - AST_LIST_INSERT_TAIL(ast_channel_varshead(child), newvar, entries); - ast_debug(1, "Inheriting variable %s from %s to %s.\n", - ast_var_name(newvar), ast_channel_name(parent), ast_channel_name(child)); - } break; default: - break; + continue; } + if (newvar) { + ast_debug(1, "Inheriting variable %s from %s to %s.\n", + ast_var_full_name(newvar), ast_channel_name(parent), + ast_channel_name(child)); + AST_LIST_INSERT_TAIL(ast_channel_varshead(child), newvar, entries); + ast_channel_publish_varset(child, ast_var_full_name(newvar), + ast_var_value(newvar)); + } } } Index: main/core_unreal.c =================================================================== --- main/core_unreal.c (revision 425610) +++ main/core_unreal.c (working copy) @@ -36,6 +36,7 @@ #include "asterisk/causes.h" #include "asterisk/channel.h" +#include "asterisk/stasis_channels.h" #include "asterisk/pbx.h" #include "asterisk/musiconhold.h" #include "asterisk/astobj2.h" @@ -685,6 +686,8 @@ clone_var = ast_var_assign(varptr->name, varptr->value); if (clone_var) { AST_LIST_INSERT_TAIL(ast_channel_varshead(semi2), clone_var, entries); + ast_channel_publish_varset(semi2, ast_var_full_name(clone_var), + ast_var_value(clone_var)); } } ast_channel_datastore_inherit(semi1, semi2);