Store modules in the order they're loaded to make reload work properly
authorMark Spencer <markster@digium.com>
Wed, 14 Apr 2004 21:10:00 +0000 (21:10 +0000)
committerMark Spencer <markster@digium.com>
Wed, 14 Apr 2004 21:10:00 +0000 (21:10 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2691 65c4cc65-6c06-0410-ace0-fbb531ad65f3

loader.c

index f16ca45..e6ff19f 100755 (executable)
--- a/loader.c
+++ b/loader.c
@@ -305,9 +305,22 @@ int ast_load_resource(char *resource_name)
                if (option_verbose)
                        ast_verbose(VERBOSE_PREFIX_1 "Loaded %s => (%s)\n", fn, m->description());
        }
-       m->next = module_list;
+
+       // add module 'm' to end of module_list chain
+       // so reload commands will be issued in same order modules were loaded
+       m->next = NULL;
+       if (module_list == NULL) {
+               // empty list so far, add at front
+               module_list = m;
+       }
+       else {
+               struct module *i;
+               // find end of chain, and add there
+               for (i = module_list; i->next; i = i->next)
+                       ;
+               i->next = m;
+       }
        
-       module_list = m;
        ast_mutex_unlock(&modlock);
        if ((res = m->load_module())) {
                ast_log(LOG_WARNING, "%s: load_module failed, returning %d\n", m->resource, res);