From f8251911a44f6b65c2377e9945e208e240dfec33 Mon Sep 17 00:00:00 2001 From: Kristian Nielsen Date: Thu, 3 Mar 2016 08:40:49 +0100 Subject: 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). --- sql/slave.cc | 1 + 1 file changed, 1 insertion(+) 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); -- cgit v1.2.1