From: Matthew Jordan Date: Sun, 8 Dec 2013 05:54:53 +0000 (+0000) Subject: res_config_sqlite: Check for CDR unregistration failures X-Git-Tag: 12.0.0~74 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1d2de2fdb867eb2c752a893bfd437fbf4856b026;p=thirdparty%2Fasterisk.git res_config_sqlite: Check for CDR unregistration failures If the CDR unregistration fails due to an inflight CDR, the res_config_sqlite module needs to bail on unloading itself. Otherwise, the config could be unloaded (including the CDR table name) while the CDR engine posts a CDR to the still registered backend, resulting in a crash. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@403435 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_config_sqlite.c b/res/res_config_sqlite.c index 7d5fd83e6a..143f4ea506 100644 --- a/res/res_config_sqlite.c +++ b/res/res_config_sqlite.c @@ -1627,11 +1627,13 @@ static char *handle_cli_sqlite_show_tables(struct ast_cli_entry *e, int cmd, str static int unload_module(void) { - if (cli_status_registered) - ast_cli_unregister_multiple(cli_status, ARRAY_LEN(cli_status)); + if (cdr_registered && ast_cdr_unregister(RES_CONFIG_SQLITE_NAME)) { + return -1; + } - if (cdr_registered) - ast_cdr_unregister(RES_CONFIG_SQLITE_NAME); + if (cli_status_registered) { + ast_cli_unregister_multiple(cli_status, ARRAY_LEN(cli_status)); + } ast_config_engine_deregister(&sqlite_engine);