summaryrefslogtreecommitdiff
path: root/cdr
diff options
context:
space:
mode:
Diffstat (limited to 'cdr')
-rw-r--r--cdr/cdr_adaptive_odbc.c5
-rw-r--r--cdr/cdr_csv.c5
-rw-r--r--cdr/cdr_custom.c4
-rw-r--r--cdr/cdr_manager.c24
-rw-r--r--cdr/cdr_odbc.c8
-rw-r--r--cdr/cdr_pgsql.c5
-rw-r--r--cdr/cdr_radius.c5
-rw-r--r--cdr/cdr_sqlite.c5
-rw-r--r--cdr/cdr_sqlite3_custom.c4
-rw-r--r--cdr/cdr_syslog.c4
-rw-r--r--cdr/cdr_tds.c6
11 files changed, 56 insertions, 19 deletions
diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c
index 0a9cfdbdd..4078b79ba 100644
--- a/cdr/cdr_adaptive_odbc.c
+++ b/cdr/cdr_adaptive_odbc.c
@@ -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");
diff --git a/cdr/cdr_csv.c b/cdr/cdr_csv.c
index a6f8a4dc0..1cc1747c6 100644
--- a/cdr/cdr_csv.c
+++ b/cdr/cdr_csv.c
@@ -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;
}
diff --git a/cdr/cdr_custom.c b/cdr/cdr_custom.c
index 2a3b1a1dd..51235db7f 100644
--- a/cdr/cdr_custom.c
+++ b/cdr/cdr_custom.c
@@ -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);
diff --git a/cdr/cdr_manager.c b/cdr/cdr_manager.c
index e3ae7a57d..90c5dbd23 100644
--- a/cdr/cdr_manager.c
+++ b/cdr/cdr_manager.c
@@ -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;
}
diff --git a/cdr/cdr_odbc.c b/cdr/cdr_odbc.c
index 022d75210..be07a8a56 100644
--- a/cdr/cdr_odbc.c
+++ b/cdr/cdr_odbc.c
@@ -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");
diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c
index dc73de477..6ac389788 100644
--- a/cdr/cdr_pgsql.c
+++ b/cdr/cdr_pgsql.c
@@ -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);
diff --git a/cdr/cdr_radius.c b/cdr/cdr_radius.c
index 2bf2002fe..1466808d5 100644
--- a/cdr/cdr_radius.c
+++ b/cdr/cdr_radius.c
@@ -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;
diff --git a/cdr/cdr_sqlite.c b/cdr/cdr_sqlite.c
index 46aa42bb1..884837c16 100644
--- a/cdr/cdr_sqlite.c
+++ b/cdr/cdr_sqlite.c
@@ -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);
}
diff --git a/cdr/cdr_sqlite3_custom.c b/cdr/cdr_sqlite3_custom.c
index 601234604..83dac6a5d 100644
--- a/cdr/cdr_sqlite3_custom.c
+++ b/cdr/cdr_sqlite3_custom.c
@@ -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);
diff --git a/cdr/cdr_syslog.c b/cdr/cdr_syslog.c
index dec4d65e9..de8cae4ec 100644
--- a/cdr/cdr_syslog.c
+++ b/cdr/cdr_syslog.c
@@ -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);
diff --git a/cdr/cdr_tds.c b/cdr/cdr_tds.c
index aef57b55d..5a1312ecc 100644
--- a/cdr/cdr_tds.c
+++ b/cdr/cdr_tds.c
@@ -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;