summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2021-02-16 12:05:45 +0200
committerJan Lindström <jan.lindstrom@mariadb.com>2021-02-17 10:28:37 +0200
commit45e33e05e2529e456fc4ce28f9f32fbe1a546526 (patch)
treefe045ede6fbc4499b564c34f40c2229e4c8c8d65
parent4d300ab1a88bee613be1bcd75153a9ce6d63cbee (diff)
downloadmariadb-git-45e33e05e2529e456fc4ce28f9f32fbe1a546526.tar.gz
MDEV-24872 : galera.galera_insert_multi MTR failed: crash with SIGABRT
Problem was that we tried to lock THD::LOCK_thd_data after we have acquired lock_sys mutex. This is against mutex ordering rules.
-rw-r--r--sql/sql_class.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 92736eacee2..047d6517a4b 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -4733,11 +4733,13 @@ thd_need_ordering_with(const MYSQL_THD thd, const MYSQL_THD other_thd)
#ifdef WITH_WSREP
/* wsrep applier, replayer and TOI processing threads are ordered
by replication provider, relaxed GAP locking protocol can be used
- between high priority wsrep threads
+ between high priority wsrep threads. Note that this function
+ is called while holding lock_sys mutex, therefore we can't
+ use THD::LOCK_thd_data mutex below to follow mutex ordering rules.
*/
if (WSREP_ON &&
wsrep_thd_is_BF(const_cast<THD *>(thd), false) &&
- wsrep_thd_is_BF(const_cast<THD *>(other_thd), true))
+ wsrep_thd_is_BF(const_cast<THD *>(other_thd), false))
return 0;
#endif /* WITH_WSREP */
rgi= thd->rgi_slave;