From 1f1fa07cd5de1026205b797f205b913eb13e6862 Mon Sep 17 00:00:00 2001 From: Daniele Sciascia <daniele.sciascia@galeracluster.com> Date: Fri, 30 Oct 2020 13:45:27 +0100 Subject: MDEV-24063 Assertion during graceful shutdown with wsrep_on=OFF MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit During graceful shutdowns, client connections are closed and eventually and THD::awake() acquires LOCK_thd_data mutex which is required later on in wsrep_thd_is_aborting(). Make sure LOCK_thd_data is acquired, even if global wsrep_on is disabled. Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com> --- mysql-test/suite/galera/r/MDEV-24063.result | 8 ++++++++ mysql-test/suite/galera/t/MDEV-24063.test | 20 ++++++++++++++++++++ sql/sql_class.h | 2 +- 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/galera/r/MDEV-24063.result create mode 100644 mysql-test/suite/galera/t/MDEV-24063.test diff --git a/mysql-test/suite/galera/r/MDEV-24063.result b/mysql-test/suite/galera/r/MDEV-24063.result new file mode 100644 index 00000000000..757cc07a642 --- /dev/null +++ b/mysql-test/suite/galera/r/MDEV-24063.result @@ -0,0 +1,8 @@ +connection node_2; +connection node_1; +connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2; +connection node_2a; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); +connection node_2; +SET GLOBAL wsrep_on=OFF; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/MDEV-24063.test b/mysql-test/suite/galera/t/MDEV-24063.test new file mode 100644 index 00000000000..24c5071cb15 --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-24063.test @@ -0,0 +1,20 @@ +# +# MDEV-24063 +# +# my_bool wsrep_thd_is_aborting(const THD*): +# Assertion `((&(&thd->LOCK_thd_data)->m_mutex)->count > 0 && +# pthread_equal(pthread_self(), (&(&thd->LOCK_thd_data)->m_mutex)->thread))' failed. +# + +--source include/galera_cluster.inc + +--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 +--connection node_2a +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); + +--connection node_2 +SET GLOBAL wsrep_on=OFF; +--source include/shutdown_mysqld.inc +--source include/start_mysqld.inc + +DROP TABLE t1; diff --git a/sql/sql_class.h b/sql/sql_class.h index 8c479db8936..41b69742834 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -3308,7 +3308,7 @@ public: void awake_no_mutex(killed_state state_to_set); void awake(killed_state state_to_set) { - bool wsrep_on_local= WSREP_NNULL(this); + bool wsrep_on_local= variables.wsrep_on; /* mutex locking order (LOCK_thd_data - LOCK_thd_kill)) requires to grab LOCK_thd_data here -- cgit v1.2.1