From 26cb9f75eeca7d4f3c9a345746f20456ff4b5ad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Tue, 7 May 2019 15:16:45 +0300 Subject: [PATCH] MDEV-19404: Assertion failure on !is_thread_specific || (mysqld_server_initialized && thd) In wsrep_plugins_post_init we iterate all theads and if they are galera appliers (wsrep_applier) we init session variables. However, current_thd was not set and recent changes on session variables require holding LOCK_gloal_system_variables mutex. --- sql/sql_plugin.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index b8aff064aca..57e08f5d789 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -4342,13 +4342,19 @@ void wsrep_plugins_post_init() THD *thd; I_List_iterator it(threads); + DBUG_ASSERT(!current_thd); + + mysql_mutex_lock(&LOCK_global_system_variables); + while ((thd= it++)) { - if (IF_WSREP(thd->wsrep_applier,1)) + if (thd->wsrep_applier) { - // Save options_bits as it will get overwritten in plugin_thdvar_init() + // Save options_bits as it will get overwritten in + // plugin_thdvar_init() (verified) ulonglong option_bits_saved= thd->variables.option_bits; + set_current_thd(thd); plugin_thdvar_init(thd); // Restore option_bits @@ -4356,6 +4362,8 @@ void wsrep_plugins_post_init() } } + mysql_mutex_unlock(&LOCK_global_system_variables); + set_current_thd(0); return; } #endif /* WITH_WSREP */