diff --git a/res/res_odbc.c b/res/res_odbc.c index 3ee8cba74e24ce1d6c6cc6d1113af5f35ccba3af..b4c15859930ff4bfb6bd6819c9930b9a4d1606b0 100644 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -996,17 +996,25 @@ static int reload(void) static int unload_module(void) { - /* Prohibit unloading */ - return -1; + ao2_cleanup(class_container); + ast_cli_unregister_multiple(cli_odbc, ARRAY_LEN(cli_odbc)); + + return 0; } static int load_module(void) { - if (!(class_container = ao2_container_alloc(1, null_hash_fn, ao2_match_by_addr))) + if (!(class_container = ao2_container_alloc(1, null_hash_fn, ao2_match_by_addr))) { return AST_MODULE_LOAD_DECLINE; - if (load_odbc_config() == -1) + } + + if (load_odbc_config() == -1) { return AST_MODULE_LOAD_DECLINE; + } + + ast_module_shutdown_ref(ast_module_info->self); ast_cli_register_multiple(cli_odbc, ARRAY_LEN(cli_odbc)); + return AST_MODULE_LOAD_SUCCESS; }