summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Nielsen <knielsen@knielsen-hq.org>2016-03-03 08:40:49 +0100
committerKristian Nielsen <knielsen@knielsen-hq.org>2016-03-03 08:53:42 +0100
commitf8251911a44f6b65c2377e9945e208e240dfec33 (patch)
treeb4014f27750f1349a5b8f7faa01021bcc20af1fb
parentc3071af5f011eca8dd253e73fa7a4ef65ac5de8d (diff)
downloadmariadb-git-f8251911a44f6b65c2377e9945e208e240dfec33.tar.gz
MDEV-9595: Shutdown takes forever with many replication channels
There was a race between end_slave() and cleanup code at the end of handle_slave_sql(). This could cause access to master_info_index and global_rpl_thread_pool after they had been freed. Fix by skipping that cleanup if server shutdown is in progress, as is done in other parts of the code as well (the cleanup, which stops worker threads that are not needed anymore, is redundant anyway when the server is shutting down).
-rw-r--r--sql/slave.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/sql/slave.cc b/sql/slave.cc
index e3209ab31f5..651d5ba0171 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -4848,6 +4848,7 @@ err_during_init:
*/
mysql_mutex_lock(&LOCK_active_mi);
if (opt_slave_parallel_threads > 0 &&
+ master_info_index &&// master_info_index is set to NULL on server shutdown
!master_info_index->any_slave_sql_running())
rpl_parallel_inactivate_pool(&global_rpl_thread_pool);
mysql_mutex_unlock(&LOCK_active_mi);