From: Andrey Volk Date: Fri, 16 Apr 2021 22:47:05 +0000 (+0300) Subject: [Core] sqldb: Fix wrong lock order in switch_cache_db_release_db_handle() X-Git-Tag: v1.10.7^2~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58f7c2d64ee334e311e6c5cc07e9237642ea9d66;p=thirdparty%2Ffreeswitch.git [Core] sqldb: Fix wrong lock order in switch_cache_db_release_db_handle() --- diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index 8d9eaf152c..061a5ed15e 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -106,6 +106,7 @@ static void add_handle(switch_cache_db_handle_t *dbh, const char *db_str, const switch_ssize_t hlen = -1; switch_mutex_lock(sql_manager.dbh_mutex); + switch_mutex_lock(dbh->mutex); switch_set_string(dbh->creator, db_callsite_str); @@ -115,12 +116,11 @@ static void add_handle(switch_cache_db_handle_t *dbh, const char *db_str, const dbh->use_count++; dbh->total_used_count++; - sql_manager.total_used_handles++; dbh->next = sql_manager.handle_pool; sql_manager.handle_pool = dbh; sql_manager.total_handles++; - switch_mutex_lock(dbh->mutex); + sql_manager.total_used_handles++; switch_mutex_unlock(sql_manager.dbh_mutex); } @@ -359,15 +359,16 @@ SWITCH_DECLARE(void) switch_cache_db_release_db_handle(switch_cache_db_handle_t break; } - switch_mutex_lock(sql_manager.dbh_mutex); (*dbh)->last_used = switch_epoch_time_now(NULL); - if ((*dbh)->use_count) { --(*dbh)->use_count; } + switch_mutex_unlock((*dbh)->mutex); - sql_manager.total_used_handles--; *dbh = NULL; + + switch_mutex_lock(sql_manager.dbh_mutex); + sql_manager.total_used_handles--; switch_mutex_unlock(sql_manager.dbh_mutex); } }