From 56b9568164b694a42e88f1f8a31012078b833203 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Thu, 16 Aug 2007 21:09:46 +0000 Subject: Don't reload a configuration file if nothing has changed. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@79747 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- cdr/cdr_tds.c | 85 +++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 37 deletions(-) (limited to 'cdr/cdr_tds.c') diff --git a/cdr/cdr_tds.c b/cdr/cdr_tds.c index 2707a4b89..af58b86e6 100644 --- a/cdr/cdr_tds.c +++ b/cdr/cdr_tds.c @@ -422,95 +422,106 @@ static int tds_unload_module(void) return 0; } -static int tds_load_module(void) +static int tds_load_module(int reload) { int res = 0; struct ast_config *cfg; struct ast_variable *var; const char *ptr = NULL; + struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 }; #ifdef FREETDS_PRE_0_62 TDS_INT result_type; #endif - cfg = ast_config_load(config); + cfg = ast_config_load(config, config_flags); if (!cfg) { ast_log(LOG_NOTICE, "Unable to load config for MSSQL CDR's: %s\n", config); return 0; - } + } else if (cfg == CONFIG_STATUS_FILEUNCHANGED) + return 0; var = ast_variable_browse(cfg, "global"); if (!var) /* nothing configured */ return 0; ptr = ast_variable_retrieve(cfg, "global", "hostname"); - if (ptr) - hostname = strdup(ptr); - else - ast_log(LOG_ERROR,"Database server hostname not specified.\n"); + if (ptr) { + if (hostname) + ast_free(hostname); + hostname = ast_strdup(ptr); + } else + ast_log(LOG_ERROR, "Database server hostname not specified.\n"); ptr = ast_variable_retrieve(cfg, "global", "dbname"); - if (ptr) - dbname = strdup(ptr); - else - ast_log(LOG_ERROR,"Database dbname not specified.\n"); + if (ptr) { + if (dbname) + ast_free(dbname); + dbname = ast_strdup(ptr); + } else + ast_log(LOG_ERROR, "Database dbname not specified.\n"); ptr = ast_variable_retrieve(cfg, "global", "user"); - if (ptr) - dbuser = strdup(ptr); - else - ast_log(LOG_ERROR,"Database dbuser not specified.\n"); + if (ptr) { + if (dbuser) + ast_free(dbuser); + dbuser = ast_strdup(ptr); + } else + ast_log(LOG_ERROR, "Database dbuser not specified.\n"); ptr = ast_variable_retrieve(cfg, "global", "password"); - if (ptr) - password = strdup(ptr); - else + if (ptr) { + if (password) + ast_free(password); + password = ast_strdup(ptr); + } else ast_log(LOG_ERROR,"Database password not specified.\n"); ptr = ast_variable_retrieve(cfg, "global", "charset"); + if (charset) + ast_free(charset); if (ptr) - charset = strdup(ptr); + charset = ast_strdup(ptr); else - charset = strdup("iso_1"); + charset = ast_strdup("iso_1"); + if (language) + ast_free(language); ptr = ast_variable_retrieve(cfg, "global", "language"); if (ptr) - language = strdup(ptr); + language = ast_strdup(ptr); else - language = strdup("us_english"); + language = ast_strdup("us_english"); - ptr = ast_variable_retrieve(cfg,"global","table"); + ptr = ast_variable_retrieve(cfg, "global", "table"); if (ptr == NULL) { - ast_debug(1,"cdr_tds: table not specified. Assuming cdr\n"); + ast_debug(1, "cdr_tds: table not specified. Assuming cdr\n"); ptr = "cdr"; } - table = strdup(ptr); + if (table) + ast_free(table); + table = ast_strdup(ptr); ast_config_destroy(cfg); + ast_mutex_lock(&tds_lock); + mssql_disconnect(); mssql_connect(); - - /* Register MSSQL CDR handler */ - res = ast_cdr_register(name, ast_module_info->description, tds_log); - if (res) - { - ast_log(LOG_ERROR, "Unable to register MSSQL CDR handling\n"); - } + ast_mutex_unlock(&tds_lock); return res; } static int reload(void) { - tds_unload_module(); - return tds_load_module(); + return tds_load_module(1); } static int load_module(void) { - if(!tds_load_module()) + if (!tds_load_module(0)) return AST_MODULE_LOAD_DECLINE; - else - return AST_MODULE_LOAD_SUCCESS; + ast_cdr_register(name, ast_module_info->description, tds_log); + return AST_MODULE_LOAD_SUCCESS; } static int unload_module(void) -- cgit v1.2.3