summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSergey Vojtovich <svoj@mariadb.org>2014-09-18 19:45:06 +0400
committerSergey Vojtovich <svoj@mariadb.org>2014-09-18 19:45:06 +0400
commitd1e46a50bc59dd42e5aae55e4e20f2548c5cf3ba (patch)
treec2567d37edf5e6297f8019e9d7d6a1e1698ccab7 /sql
parent53a44915c53a16f4c52c98227b71f44ae421025c (diff)
downloadmariadb-git-d1e46a50bc59dd42e5aae55e4e20f2548c5cf3ba.tar.gz
MDEV-6749 - Deadlock between GRANT/REVOKE, SELECT FROM I_S.COLUMNS,
SET slow_query_log and failed connection attempt A very subtle though valid deadlock. Deadlock chain: wrlock(LOCK_grant) -> lock(acl_cache->lock) GRANT/REVOKE CREATE/DROP USER lock(LOCK_open) -> rdlock(LOCK_grant) SELECT * FROM I_S.COLUMNS wrlock(LOCK_logger) -> lock(LOCK_open) SET @@global.slow_query_log='ON' lock(acl_cache->lock) -> rdlock(LOCK_logger) Failed connection Fixed by removing relationship between acl_cache->lock and LOCK_logger during failed connection attempt.
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_acl.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 083f23d0820..c4ef699c049 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -9224,9 +9224,9 @@ bool acl_authenticate(THD *thd, uint connect_errors,
mpvio.auth_info.authenticated_as, TRUE);
if (!acl_proxy_user)
{
+ mysql_mutex_unlock(&acl_cache->lock);
if (!thd->is_error())
login_failed_error(thd);
- mysql_mutex_unlock(&acl_cache->lock);
DBUG_RETURN(1);
}
acl_user= acl_proxy_user->copy(thd->mem_root);