From 76d1ae97d4f62da0cf51b29469da8adba71112b6 Mon Sep 17 00:00:00 2001 From: George Joseph Date: Wed, 6 Aug 2014 16:05:39 +0000 Subject: [PATCH] pbx_lua: fix regression with global sym export and context clash by pbx_config. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ASTERISK-23818 (lua contexts being overwritten by contexts of the same name in pbx_config) surfaced because pbx_lua, having the AST_MODFLAG_GLOBAL_SYMBOLS set, was always force loaded before pbx_config. Since I couldn't find any reason for pbx_lua to export it's symbols to the rest of Asterisk, I simply changed the flag to AST_MODFLAG_DEFAULT. Problem solved. What I didn't realize was that the symbols need to be exported not because Asterisk needs them but because any external Lua modules like luasql.mysql need the base Lua language APIs exported (ASTERISK-17279). Back to ASTERISK-23818... It looks like there's an issue in pbx.c where context_merge was only merging includes, switches and ignore patterns if the context was already existing AND has extensions, or if the context was brand new. If pbx_lua is loaded before pbx_config, the context will exist BUT pbx_lua, being implemented as a switch, will never place extensions in it, just the switch statement. The result is that when pbx_config loads, it never merges the switch statement created by pbx_lua into the final context. This patch sets pbx_lua's modflag back to AST_MODFLAG_GLOBAL_SYMBOLS and adds an "else if" in context_merge that catches the case where an existing context has includes, switchs or ingore patterns but no actual extensions. ASTERISK-23818 #close Reported by: Dennis Guse Reported by: Timo Teräs Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3891/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@420146 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/pbx.c | 5 +++++ pbx/pbx_lua.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/main/pbx.c b/main/pbx.c index b10ff51cb8..c24e30542a 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -7868,6 +7868,11 @@ static void context_merge(struct ast_context **extcontexts, struct ast_hashtab * ast_hashtab_end_traversal(prio_iter); } ast_hashtab_end_traversal(exten_iter); + } else if (new) { + /* If the context existed but had no extensions, we still want to merge + * the includes, switches and ignore patterns. + */ + context_merge_incls_swits_igps_other_registrars(new, context, registrar); } if (!insert_count && !new && (strcmp(context->registrar, registrar) != 0 || diff --git a/pbx/pbx_lua.c b/pbx/pbx_lua.c index 33155f0a84..93d84736ee 100644 --- a/pbx/pbx_lua.c +++ b/pbx/pbx_lua.c @@ -1562,7 +1562,7 @@ static int load_module(void) return AST_MODULE_LOAD_SUCCESS; } -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Lua PBX Switch", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Lua PBX Switch", .load = load_module, .unload = unload_module, .reload = reload,