]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 313047 via svnmerge from
authorJonathan Rose <jrose@digium.com>
Thu, 7 Apr 2011 13:35:33 +0000 (13:35 +0000)
committerJonathan Rose <jrose@digium.com>
Thu, 7 Apr 2011 13:35:33 +0000 (13:35 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.6.2

........
  r313047 | jrose | 2011-04-07 08:23:01 -0500 (Thu, 07 Apr 2011) | 9 lines

  Makes parking lots clear and rebuild properly when features reload is invoked from CLI

  Before, default parkinglot in context parkedcalls with ext 700 would always be present and when reload was invoked, the previous parkinglots would not be cleared.

  (closes issue #18801)
  Reported by: mickecarlsson

  Review: https://reviewboard.asterisk.org/r/1161/
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@313048 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/features.c

index 119afc1c4e372183e6df39d5a0cb6f954f2f0fbc..2efa4e6cf433609263224cb972fe2d0f9f1a7427 100644 (file)
@@ -4838,6 +4838,17 @@ static int load_config(void)
                "applicationmap"
        };
 
+       /* Clear the existing parkinglots in the parkinglots container. */
+       {
+               struct ast_parkinglot *p;
+               struct ao2_iterator iter = ao2_iterator_init(parkinglots, 0);
+               while ((p = ao2_iterator_next(&iter))) {
+                       ao2_unlink(parkinglots, p);
+                       ao2_ref(p,-1);
+               }
+               ao2_iterator_destroy(&iter);
+       }
+       
        default_parkinglot = build_parkinglot(DEFAULT_PARKINGLOT, NULL);
        if (default_parkinglot) {
                ao2_lock(default_parkinglot);
@@ -4887,7 +4898,19 @@ static int load_config(void)
                ast_log(LOG_WARNING,"Could not load features.conf\n");
                return 0;
        }
-       for (var = ast_variable_browse(cfg, "general"); var; var = var->next) {
+
+       if ((var = ast_variable_browse(cfg, "general"))) {
+               /* Find a general context in features.conf, we need to clear our existing default context */
+               /* Can't outright destroy the parking lot because it's needed in a little while. */
+               if ((con = ast_context_find(default_parkinglot->parking_con))) {
+                       ast_context_destroy(con, registrar);
+               }
+               if ((con = ast_context_find(default_parkinglot->parking_con_dial))) {
+                       ast_context_destroy(con, registrar);
+               }
+       } 
+
+       for (; var; var = var->next) {
                if (!strcasecmp(var->name, "parkext")) {
                        ast_copy_string(default_parkinglot->parkext, var->value, sizeof(default_parkinglot->parkext));
                } else if (!strcasecmp(var->name, "context")) {