From 45e33e05e2529e456fc4ce28f9f32fbe1a546526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Tue, 16 Feb 2021 12:05:45 +0200 Subject: [PATCH] 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. --- sql/sql_class.cc | 6 ++++-- 1 file 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), false) && - wsrep_thd_is_BF(const_cast(other_thd), true)) + wsrep_thd_is_BF(const_cast(other_thd), false)) return 0; #endif /* WITH_WSREP */ rgi= thd->rgi_slave;