]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
followme: initialize all config items on reload 84/3484/2
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>
Thu, 11 Aug 2016 17:10:44 +0000 (20:10 +0300)
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>
Wed, 17 Aug 2016 15:51:31 +0000 (18:51 +0300)
Some configuration directives were not initialized on reload, and hence
were not reset to default if they were removed from followme.conf.

ASTERISK-26288 #close

Change-Id: Ief829e16374ad1e0ecfd63e6ee4923b5a1d1c150

apps/app_followme.c

index a955843bc7b0f41df6e4ef1d33d80f786bb91b29..938e63ec4bfd99f086036e99b53272ed19c63c4e 100644 (file)
@@ -316,9 +316,17 @@ static struct call_followme *alloc_profile(const char *fmname)
 
        ast_mutex_init(&f->lock);
        ast_copy_string(f->name, fmname, sizeof(f->name));
-       f->moh[0] = '\0';
-       f->context[0] = '\0';
+       AST_LIST_HEAD_INIT_NOLOCK(&f->numbers);
+       AST_LIST_HEAD_INIT_NOLOCK(&f->blnumbers);
+       AST_LIST_HEAD_INIT_NOLOCK(&f->wlnumbers);
+       return f;
+}
+
+static void init_profile(struct call_followme *f, int activate)
+{
        f->enable_callee_prompt = enable_callee_prompt;
+       f->context[0] = '\0';
+       ast_copy_string(f->moh, defaultmoh, sizeof(f->moh));
        ast_copy_string(f->takecall, takecall, sizeof(f->takecall));
        ast_copy_string(f->nextindp, nextindp, sizeof(f->nextindp));
        ast_copy_string(f->callfromprompt, callfromprompt, sizeof(f->callfromprompt));
@@ -327,16 +335,9 @@ static struct call_followme *alloc_profile(const char *fmname)
        ast_copy_string(f->plsholdprompt, plsholdprompt, sizeof(f->plsholdprompt));
        ast_copy_string(f->statusprompt, statusprompt, sizeof(f->statusprompt));
        ast_copy_string(f->sorryprompt, sorryprompt, sizeof(f->sorryprompt));
-       AST_LIST_HEAD_INIT_NOLOCK(&f->numbers);
-       AST_LIST_HEAD_INIT_NOLOCK(&f->blnumbers);
-       AST_LIST_HEAD_INIT_NOLOCK(&f->wlnumbers);
-       return f;
-}
-
-static void init_profile(struct call_followme *f)
-{
-       f->active = 1;
-       ast_copy_string(f->moh, defaultmoh, sizeof(f->moh));
+       if (activate) {
+               f->active = 1;
+       }
 }
 
    
@@ -518,7 +519,7 @@ static int reload_followme(int reload)
                if (!new)
                        ast_mutex_lock(&f->lock);
                /* Re-initialize the profile */
-               init_profile(f);
+               init_profile(f, 1);
                free_numbers(f);
                var = ast_variable_browse(cfg, cat);
                while (var) {
@@ -1248,6 +1249,7 @@ static struct call_followme *find_realtime(const char *name)
                ast_free(str);
                return NULL;
        }
+       init_profile(new_follower, 0);
 
        for (v = var; v; v = v->next) {
                if (!strcasecmp(v->name, "active")) {