diff options
author | Daniele Sciascia <daniele.sciascia@galeracluster.com> | 2020-10-30 13:45:27 +0100 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2020-11-03 19:47:17 +0200 |
commit | 1f1fa07cd5de1026205b797f205b913eb13e6862 (patch) | |
tree | d246695b4f4002fe9fc3819f75ce4c75176324c8 | |
parent | 4d6c6611443f1e0e1cdab34ac6e320031e7f980b (diff) | |
download | mariadb-git-1f1fa07cd5de1026205b797f205b913eb13e6862.tar.gz |
MDEV-24063 Assertion during graceful shutdown with wsrep_on=OFF
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>
-rw-r--r-- | mysql-test/suite/galera/r/MDEV-24063.result | 8 | ||||
-rw-r--r-- | mysql-test/suite/galera/t/MDEV-24063.test | 20 | ||||
-rw-r--r-- | sql/sql_class.h | 2 |
3 files changed, 29 insertions, 1 deletions
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 |