[asterisk-commits] tilghman: branch 1.8 r279410 - /branches/1.8/cdr/cdr_odbc.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sun Jul 25 13:21:31 CDT 2010


Author: tilghman
Date: Sun Jul 25 13:21:27 2010
New Revision: 279410

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=279410
Log:
Don't re-register CDR module on reload.

(closes issue #17304)
 Reported by: jnemeth
 Patches: 
       20100507__issue17304.diff.txt uploaded by tilghman (license 14)
 Tested by: jnemeth

Modified:
    branches/1.8/cdr/cdr_odbc.c

Modified: branches/1.8/cdr/cdr_odbc.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/cdr/cdr_odbc.c?view=diff&rev=279410&r1=279409&r2=279410
==============================================================================
--- branches/1.8/cdr/cdr_odbc.c (original)
+++ branches/1.8/cdr/cdr_odbc.c Sun Jul 25 13:21:27 2010
@@ -54,6 +54,7 @@
 	CONFIG_USEGMTIME =         1 << 1,
 	CONFIG_DISPOSITIONSTRING = 1 << 2,
 	CONFIG_HRTIME =            1 << 3,
+	CONFIG_REGISTERED =        1 << 4,
 };
 
 static struct ast_flags config = { 0 };
@@ -242,14 +243,24 @@
 		ast_verb(3, "cdr_odbc: dsn is %s\n", dsn);
 		ast_verb(3, "cdr_odbc: table is %s\n", table);
 
-		res = ast_cdr_register(name, ast_module_info->description, odbc_log);
-		if (res) {
-			ast_log(LOG_ERROR, "cdr_odbc: Unable to register ODBC CDR handling\n");
+		if (!ast_test_flag(&config, CONFIG_REGISTERED)) {
+			res = ast_cdr_register(name, ast_module_info->description, odbc_log);
+			if (res) {
+				ast_log(LOG_ERROR, "cdr_odbc: Unable to register ODBC CDR handling\n");
+			} else {
+				ast_set_flag(&config, CONFIG_REGISTERED);
+			}
 		}
 	} while (0);
 
-	if (cfg && cfg != CONFIG_STATUS_FILEUNCHANGED && cfg != CONFIG_STATUS_FILEINVALID)
+	if (ast_test_flag(&config, CONFIG_REGISTERED) && (!cfg || dsn == NULL || table == NULL)) {
+		ast_cdr_unregister(name);
+		ast_clear_flag(&config, CONFIG_REGISTERED);
+	}
+
+	if (cfg && cfg != CONFIG_STATUS_FILEUNCHANGED && cfg != CONFIG_STATUS_FILEINVALID) {
 		ast_config_destroy(cfg);
+	}
 	return res;
 }
 




More information about the asterisk-commits mailing list