From b190d76f7f5dc583ca16de81f0f9655010c4644b Mon Sep 17 00:00:00 2001 From: Tilghman Lesher <tilghman@meg.abyt.es> Date: Sun, 25 Jul 2010 18:22:13 +0000 Subject: [PATCH] Merged revisions 279410 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r279410 | tilghman | 2010-07-25 13:21:27 -0500 (Sun, 25 Jul 2010) | 8 lines 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 ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@279413 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- cdr/cdr_odbc.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/cdr/cdr_odbc.c b/cdr/cdr_odbc.c index e8a7ce828e..ab4a1455d6 100644 --- a/cdr/cdr_odbc.c +++ b/cdr/cdr_odbc.c @@ -54,6 +54,7 @@ enum { 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 @@ static int odbc_load_module(int reload) 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; } -- GitLab