diff --git a/res/res_statsd.c b/res/res_statsd.c index 3e52c219b55a482c8d98d4b8eeff1b52cf75c292..01a1fd867aa91cf5fb89133e6c57c7e33ef4d86a 100644 --- a/res/res_statsd.c +++ b/res/res_statsd.c @@ -316,6 +316,14 @@ static void statsd_shutdown(void) } } +static int unload_module(void) +{ + statsd_shutdown(); + aco_info_destroy(&cfg_info); + ao2_global_obj_release(confs); + return 0; +} + static int load_module(void) { if (aco_info_init(&cfg_info)) { @@ -364,34 +372,34 @@ static int load_module(void) return AST_MODULE_LOAD_SUCCESS; } - if (statsd_init() != 0) { - aco_info_destroy(&cfg_info); + if (statsd_init()) { + unload_module(); return AST_MODULE_LOAD_DECLINE; } return AST_MODULE_LOAD_SUCCESS; } -static int unload_module(void) -{ - statsd_shutdown(); - aco_info_destroy(&cfg_info); - ao2_global_obj_release(confs); - return 0; -} - static int reload_module(void) { - if (aco_process_config(&cfg_info, 1)) { + switch (aco_process_config(&cfg_info, 1)) { + case ACO_PROCESS_OK: + break; + case ACO_PROCESS_UNCHANGED: + return AST_MODULE_LOAD_SUCCESS; + case ACO_PROCESS_ERROR: + default: return AST_MODULE_LOAD_DECLINE; } if (is_enabled()) { - return statsd_init(); + if (statsd_init()) { + return AST_MODULE_LOAD_DECLINE; + } } else { statsd_shutdown(); - return AST_MODULE_LOAD_SUCCESS; } + return AST_MODULE_LOAD_SUCCESS; } /* The priority of this module is set just after realtime, since it loads