From 9021f40b8ebfa9a9e0b01029a62742b7cdde5be5 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 30 Sep 2024 18:08:00 +0200 Subject: [PATCH] MDEV-35050 Found wrong usage of mutex upon setting plugin session variables --- mysql-test/suite/plugins/r/fulltext_plugin.result | 11 +++++++++++ mysql-test/suite/plugins/t/fulltext_plugin.test | 15 ++++++++++++--- sql/session_tracker.cc | 4 ++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/mysql-test/suite/plugins/r/fulltext_plugin.result b/mysql-test/suite/plugins/r/fulltext_plugin.result index 2c104c98676..6fcba7735c9 100644 --- a/mysql-test/suite/plugins/r/fulltext_plugin.result +++ b/mysql-test/suite/plugins/r/fulltext_plugin.result @@ -1,3 +1,6 @@ +# +# BUG#39746 - Debug flag breaks struct definition (server crash) +# INSTALL PLUGIN simple_parser SONAME 'mypluglib.so'; CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a) WITH PARSER simple_parser); ALTER TABLE t1 ADD FULLTEXT(b) WITH PARSER simple_parser; @@ -5,3 +8,11 @@ DROP TABLE t1; UNINSTALL PLUGIN simple_parser; show status like 'a%status'; Variable_name Value +# +# MDEV-35050 Found wrong usage of mutex upon setting plugin session variables +# +install soname 'mypluglib'; +set session_track_system_variables="*"; +set session simple_parser_simple_thdvar_one = 10; +uninstall soname 'mypluglib'; +# End of 10.5 tests diff --git a/mysql-test/suite/plugins/t/fulltext_plugin.test b/mysql-test/suite/plugins/t/fulltext_plugin.test index e9b4343e0dc..8a3a9d62e9c 100644 --- a/mysql-test/suite/plugins/t/fulltext_plugin.test +++ b/mysql-test/suite/plugins/t/fulltext_plugin.test @@ -1,8 +1,8 @@ --source include/have_simple_parser.inc -# -# BUG#39746 - Debug flag breaks struct definition (server crash) -# +--echo # +--echo # BUG#39746 - Debug flag breaks struct definition (server crash) +--echo # --replace_result .dll .so eval INSTALL PLUGIN simple_parser SONAME '$MYPLUGLIB_SO'; CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a) WITH PARSER simple_parser); @@ -15,3 +15,12 @@ UNINSTALL PLUGIN simple_parser; # show status like 'a%status'; +--echo # +--echo # MDEV-35050 Found wrong usage of mutex upon setting plugin session variables +--echo # +install soname 'mypluglib'; +set session_track_system_variables="*"; +set session simple_parser_simple_thdvar_one = 10; +uninstall soname 'mypluglib'; + +--echo # End of 10.5 tests diff --git a/sql/session_tracker.cc b/sql/session_tracker.cc index 10d0267326e..cd3491ca9f3 100644 --- a/sql/session_tracker.cc +++ b/sql/session_tracker.cc @@ -428,6 +428,7 @@ bool Session_sysvars_tracker::vars_list::store(THD *thd, String *buf) SHOW_VAR show; CHARSET_INFO *charset; size_t val_length, length; + mysql_mutex_lock(&LOCK_global_system_variables); mysql_mutex_lock(&LOCK_plugin); if (!*node->test_load) { @@ -444,13 +445,12 @@ bool Session_sysvars_tracker::vars_list::store(THD *thd, String *buf) show.name= svar->name.str; show.value= (char *) svar; - mysql_mutex_lock(&LOCK_global_system_variables); const char *value= get_one_variable(thd, &show, OPT_SESSION, SHOW_SYS, NULL, &charset, val_buf, &val_length); - mysql_mutex_unlock(&LOCK_global_system_variables); if (is_plugin) mysql_mutex_unlock(&LOCK_plugin); + mysql_mutex_unlock(&LOCK_global_system_variables); length= net_length_size(svar->name.length) + svar->name.length +