mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Prevent CDR backends from unregistering while billing data is in flight
This patch makes it so that CDR backends cannot be unregistered while active CDR records exist. This helps to prevent billing data from being lost during restarts and shutdowns. Review: https://reviewboard.asterisk.org/r/2880/ ........ Merged revisions 402081 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@402082 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -767,7 +767,10 @@ early_release:
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (AST_RWLIST_WRLOCK(&odbc_tables)) {
|
||||
ast_cdr_register(name, ast_module_info->description, odbc_log);
|
||||
ast_log(LOG_ERROR, "Unable to lock column list. Unload failed.\n");
|
||||
|
@@ -315,7 +315,10 @@ static int csv_log(struct ast_cdr *cdr)
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
loaded = 0;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -184,7 +184,9 @@ static int custom_log(struct ast_cdr *cdr)
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (AST_RWLIST_WRLOCK(&sinks)) {
|
||||
ast_cdr_register(name, ast_module_info->description, custom_log);
|
||||
|
@@ -86,8 +86,9 @@ static int load_config(int reload)
|
||||
if (!cfg) {
|
||||
/* Standard configuration */
|
||||
ast_log(LOG_WARNING, "Failed to load configuration file. Module not activated.\n");
|
||||
if (enablecdr)
|
||||
ast_cdr_unregister(name);
|
||||
if (enablecdr) {
|
||||
ast_cdr_backend_suspend(name);
|
||||
}
|
||||
enablecdr = 0;
|
||||
return -1;
|
||||
}
|
||||
@@ -135,10 +136,11 @@ static int load_config(int reload)
|
||||
|
||||
ast_config_destroy(cfg);
|
||||
|
||||
if (enablecdr && !newenablecdr)
|
||||
ast_cdr_unregister(name);
|
||||
else if (!enablecdr && newenablecdr)
|
||||
ast_cdr_register(name, "Asterisk Manager Interface CDR Backend", manager_log);
|
||||
if (!newenablecdr) {
|
||||
ast_cdr_backend_suspend(name);
|
||||
} else if (newenablecdr) {
|
||||
ast_cdr_backend_unsuspend(name);
|
||||
}
|
||||
enablecdr = newenablecdr;
|
||||
|
||||
return 0;
|
||||
@@ -210,7 +212,10 @@ static int manager_log(struct ast_cdr *cdr)
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (customfields)
|
||||
ast_free(customfields);
|
||||
|
||||
@@ -219,7 +224,12 @@ static int unload_module(void)
|
||||
|
||||
static int load_module(void)
|
||||
{
|
||||
if (ast_cdr_register(name, "Asterisk Manager Interface CDR Backend", manager_log)) {
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
if (load_config(0)) {
|
||||
ast_cdr_unregister(name);
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
|
@@ -266,8 +266,10 @@ static int odbc_load_module(int reload)
|
||||
} while (0);
|
||||
|
||||
if (ast_test_flag(&config, CONFIG_REGISTERED) && (!cfg || dsn == NULL || table == NULL)) {
|
||||
ast_cdr_unregister(name);
|
||||
ast_cdr_backend_suspend(name);
|
||||
ast_clear_flag(&config, CONFIG_REGISTERED);
|
||||
} else {
|
||||
ast_cdr_backend_unsuspend(name);
|
||||
}
|
||||
|
||||
if (cfg && cfg != CONFIG_STATUS_FILEUNCHANGED && cfg != CONFIG_STATUS_FILEINVALID) {
|
||||
@@ -283,7 +285,9 @@ static int load_module(void)
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (dsn) {
|
||||
ast_verb(11, "cdr_odbc: free dsn\n");
|
||||
|
@@ -436,7 +436,10 @@ static void empty_columns(void)
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
ast_cli_unregister_multiple(cdr_pgsql_status_cli, ARRAY_LEN(cdr_pgsql_status_cli));
|
||||
|
||||
PQfinish(conn);
|
||||
|
@@ -230,7 +230,10 @@ return_cleanup:
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rh) {
|
||||
rc_destroy(rh);
|
||||
rh = NULL;
|
||||
|
@@ -191,7 +191,10 @@ static int sqlite_log(struct ast_cdr *cdr)
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (db) {
|
||||
sqlite_close(db);
|
||||
}
|
||||
|
@@ -289,7 +289,9 @@ static int write_cdr(struct ast_cdr *cdr)
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
free_config(0);
|
||||
|
||||
|
@@ -235,7 +235,9 @@ static int load_config(int reload)
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
ast_cdr_unregister(name);
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (AST_RWLIST_WRLOCK(&sinks)) {
|
||||
ast_cdr_register(name, ast_module_info->description, syslog_log);
|
||||
|
@@ -443,6 +443,10 @@ failed:
|
||||
|
||||
static int tds_unload_module(void)
|
||||
{
|
||||
if (ast_cdr_unregister(name)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (settings) {
|
||||
ast_mutex_lock(&tds_lock);
|
||||
mssql_disconnect();
|
||||
@@ -452,8 +456,6 @@ static int tds_unload_module(void)
|
||||
ast_free(settings);
|
||||
}
|
||||
|
||||
ast_cdr_unregister(name);
|
||||
|
||||
dbexit();
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user