allow global variables to be reset on reload (defaults to off) (bug #4385)
authorKevin P. Fleming <kpfleming@digium.com>
Fri, 3 Jun 2005 02:27:08 +0000 (02:27 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Fri, 3 Jun 2005 02:27:08 +0000 (02:27 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5825 65c4cc65-6c06-0410-ace0-fbb531ad65f3

configs/extensions.conf.sample
pbx/pbx_config.c

index ca5b44b..1bba5ea 100755 (executable)
@@ -34,7 +34,16 @@ writeprotect=no
 ; (this is the original behavior of Asterisk 1.0 and earlier).
 ;
 autofallthrough=yes
-
+;
+; If clearglobalvars is set, global variables will be cleared 
+; and reparsed on an extensions reload, or Asterisk reload.
+;
+; If clearglobalvars is not set, then global variables will persist
+; through reloads, and even if deleted from the extensions.conf or
+; one if its included files, will remain set to the previous value.
+;
+clearglobalvars=no
+;
 ; You can include other config files, use the #include command (without the ';')
 ; Note that this is different from the "include" command that includes contexts within 
 ; other contexts. The #include command works in all asterisk configuration files.
index 8aa523c..4b53dfa 100755 (executable)
@@ -44,6 +44,7 @@ static char *registrar = "pbx_config";
 static int static_config = 0;
 static int write_protect_config = 1;
 static int autofallthrough_config = 0;
+static int clearglobalvars_config = 0;
 
 AST_MUTEX_DEFINE_STATIC(save_dialplan_lock);
 
@@ -97,7 +98,8 @@ static char context_remove_ignorepat_help[] =
 
 static char reload_extensions_help[] =
 "Usage: reload extensions.conf without reloading any other modules\n"
-"       This command does not delete global variables\n"
+"       This command does not delete global variables unless\n"
+"       clearglobalvars is set to yes in extensions.conf\n"
 "\n"
 "Example: extensions reload\n";
 
@@ -1636,6 +1638,9 @@ static int pbx_load_module(void)
                autofallthrough_config = ast_true(ast_variable_retrieve(cfg, "general",
                        "autofallthrough"));
 
+               clearglobalvars_config = ast_true(ast_variable_retrieve(cfg, "general", 
+                       "clearglobalvars"));
+
                v = ast_variable_browse(cfg, "globals");
                while(v) {
                        memset(realvalue, 0, sizeof(realvalue));
@@ -1816,10 +1821,8 @@ int load_module(void)
 int reload(void)
 {
        ast_context_destroy(NULL, registrar);
-       /* For martin's global variables, don't clear them on reload */
-#if 0
-       pbx_builtin_clear_globals();
-#endif 
+       if (clearglobalvars_config)
+               pbx_builtin_clear_globals();
        pbx_load_module();
        return 0;
 }