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.
........
Merged revisions 403435 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@403436
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
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);