From: Tzafrir Cohen Date: Thu, 14 Sep 2017 11:18:12 +0300 Subject: revert LOAD_DECLINE change for cdr_mysql.c Revert f882ca25722b6290dc6e8d786452b0b26adceed1 for cdr_mysql alone. This seems to induce a crash. https://issues.asterisk.org/jira/browse/ASTERISK-27270 --- addons/cdr_mysql.c | 43 ++++++++++++------------------------------- 1 file changed, 12 insertions(+), 31 deletions(-) diff --git a/addons/cdr_mysql.c b/addons/cdr_mysql.c index 70dab1a..4621143 100644 --- a/addons/cdr_mysql.c +++ b/addons/cdr_mysql.c @@ -358,20 +358,9 @@ db_reconnect: return 0; } -static void free_strings(void) -{ - struct unload_string *us; - - AST_LIST_LOCK(&unload_strings); - while ((us = AST_LIST_REMOVE_HEAD(&unload_strings, entry))) { - ast_free(us->str); - ast_free(us); - } - AST_LIST_UNLOCK(&unload_strings); -} - static int my_unload_module(int reload) { + struct unload_string *us; struct column *entry; ast_cli_unregister_multiple(cdr_mysql_status_cli, sizeof(cdr_mysql_status_cli) / sizeof(struct ast_cli_entry)); @@ -382,7 +371,12 @@ static int my_unload_module(int reload) records = 0; } - free_strings(); + AST_LIST_LOCK(&unload_strings); + while ((us = AST_LIST_REMOVE_HEAD(&unload_strings, entry))) { + ast_free(us->str); + ast_free(us); + } + AST_LIST_UNLOCK(&unload_strings); if (!reload) { AST_RWLIST_WRLOCK(&columns); @@ -518,16 +512,13 @@ static int my_load_module(int reload) } else { calldate_compat = 0; } - ast_free(compat); if (res < 0) { if (reload) { AST_RWLIST_UNLOCK(&columns); } ast_config_destroy(cfg); - free_strings(); - - return AST_MODULE_LOAD_DECLINE; + return AST_MODULE_LOAD_FAILURE; } /* Check for any aliases */ @@ -598,9 +589,7 @@ static int my_load_module(int reload) connected = 0; AST_RWLIST_UNLOCK(&columns); ast_config_destroy(cfg); - free_strings(); - - return AST_MODULE_LOAD_DECLINE; + return AST_MODULE_LOAD_FAILURE; } if (!(result = mysql_store_result(&mysql))) { @@ -609,9 +598,7 @@ static int my_load_module(int reload) connected = 0; AST_RWLIST_UNLOCK(&columns); ast_config_destroy(cfg); - free_strings(); - - return AST_MODULE_LOAD_DECLINE; + return AST_MODULE_LOAD_FAILURE; } while ((row = mysql_fetch_row(result))) { @@ -677,8 +664,7 @@ static int my_load_module(int reload) AST_RWLIST_UNLOCK(&columns); ast_config_destroy(cfg); if (res < 0) { - my_unload_module(0); - return AST_MODULE_LOAD_DECLINE; + return AST_MODULE_LOAD_FAILURE; } if (!reload) { @@ -692,12 +678,7 @@ static int my_load_module(int reload) res = ast_cli_register_multiple(cdr_mysql_status_cli, sizeof(cdr_mysql_status_cli) / sizeof(struct ast_cli_entry)); } - if (res) { - my_unload_module(0); - return AST_MODULE_LOAD_DECLINE; - } - - return AST_MODULE_LOAD_SUCCESS; + return res; } static int load_module(void)