Skip to content

Commit

Permalink
Fix Admin deadlock on concurrent connections - Closes #4415
Browse files Browse the repository at this point in the history
  • Loading branch information
JavierJF committed Jan 10, 2024
1 parent daf00fd commit 862a1a7
Showing 1 changed file with 3 additions and 4 deletions.
7 changes: 3 additions & 4 deletions lib/ProxySQL_Admin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9710,9 +9710,6 @@ void ProxySQL_Admin::stats___mysql_query_rules() {
}

void ProxySQL_Admin::stats___proxysql_servers_checksums() {
statsdb->execute("BEGIN");
statsdb->execute("DELETE FROM stats_proxysql_servers_checksums");
SQLite3_result *resultset=NULL;
// NOTE: This mutex unlock is required due to a race condition created when:
// - One Admin session has the following callstack:
// + admin_session_handler -> locks on 'sql_query_global_mutex'
Expand All @@ -9727,8 +9724,10 @@ void ProxySQL_Admin::stats___proxysql_servers_checksums() {
// + ProxySQL_Cluster::pull_mysql_query_rules_from_peer -> tries to lock on 'sql_query_global_mutex'
// Producing a deadlock scenario between the two threads.
pthread_mutex_unlock(&this->sql_query_global_mutex);
resultset=GloProxyCluster->get_stats_proxysql_servers_checksums();
SQLite3_result* resultset = GloProxyCluster->get_stats_proxysql_servers_checksums();
pthread_mutex_lock(&this->sql_query_global_mutex);
statsdb->execute("BEGIN");
statsdb->execute("DELETE FROM stats_proxysql_servers_checksums");
if (resultset) {
int rc;
sqlite3_stmt *statement1=NULL;
Expand Down

0 comments on commit 862a1a7

Please sign in to comment.