res_statsd.c: Made use defaults if the statsd.conf file does not exist.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 2 Oct 2018 18:29:59 +0000 (13:29 -0500)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 2 Oct 2018 22:12:32 +0000 (17:12 -0500)
This module is an optional dependency of many modules.  If it declines to
load it then forces other modules that can optionally use this module to
also decline.

* Made use default configuration if there is a config error or the config
file does not exist.

Change-Id: If1068a582ec54ab7fb437265cb5370a97a825737

res/res_statsd.c

index 3e08152..3e52c21 100644 (file)
@@ -339,9 +339,25 @@ static int load_module(void)
                "", OPT_CHAR_ARRAY_T, 0,
                CHARFLDSET(struct conf_global_options, prefix));
 
-       if (aco_process_config(&cfg_info, 0)) {
-               aco_info_destroy(&cfg_info);
-               return AST_MODULE_LOAD_DECLINE;
+       if (aco_process_config(&cfg_info, 0) == ACO_PROCESS_ERROR) {
+               struct conf *cfg;
+
+               ast_log(LOG_NOTICE, "Could not load statsd config; using defaults\n");
+               cfg = conf_alloc();
+               if (!cfg) {
+                       aco_info_destroy(&cfg_info);
+                       return AST_MODULE_LOAD_DECLINE;
+               }
+
+               if (aco_set_defaults(&global_option, "general", cfg->global)) {
+                       ast_log(LOG_ERROR, "Failed to initialize statsd defaults.\n");
+                       ao2_ref(cfg, -1);
+                       aco_info_destroy(&cfg_info);
+                       return AST_MODULE_LOAD_DECLINE;
+               }
+
+               ao2_global_obj_replace_unref(confs, cfg);
+               ao2_ref(cfg, -1);
        }
 
        if (!is_enabled()) {