commit 61252db7b54d6ee792e25ebb2ec34c15cd7afea5
Author: Kristian Nielsen <knielsen@knielsen-hq.org>
Date:   Thu Mar 3 08:40:49 2016 +0100

    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).

diff --git a/sql/slave.cc b/sql/slave.cc
index 72bed45..e9bcfb0 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -4955,6 +4955,7 @@ pthread_handler_t handle_slave_sql(void *arg)
   */
   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);
