diff options
author | Sergey Vojtovich <svoj@mariadb.org> | 2014-01-28 11:12:43 +0400 |
---|---|---|
committer | Sergey Vojtovich <svoj@mariadb.org> | 2014-01-28 11:12:43 +0400 |
commit | e1e5ce0da242c30a744f496dfc5b5a00584d0e56 (patch) | |
tree | 4518efdf226a6225dbc7356a31a2042dfb4213a8 /mysql-test/t/plugin_vars.test | |
parent | 94868914b84bd96ea946fc583862126ab8bda3a0 (diff) | |
download | mariadb-git-e1e5ce0da242c30a744f496dfc5b5a00584d0e56.tar.gz |
MDEV-5345 - Deadlock between mysql_change_user(), SHOW VARIABLES and
INSTALL PLUGIN
There was mixed lock order between LOCK_plugin, LOCK_global_system_variables
and LOCK_system_variables_hash. This patch ensures that write-lock on
LOCK_system_variables_hash doesn't intersect with LOCK_plugin.
Fixed by moving initialization/deinitialization of plugin options from
plugin_add()/plugin_del() to plugin_initialize()/plugin_deinitalize().
So that plugin options are handled without protection of LOCK_plugin.
Diffstat (limited to 'mysql-test/t/plugin_vars.test')
-rw-r--r-- | mysql-test/t/plugin_vars.test | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/mysql-test/t/plugin_vars.test b/mysql-test/t/plugin_vars.test new file mode 100644 index 00000000000..8ba8fe2ec0e --- /dev/null +++ b/mysql-test/t/plugin_vars.test @@ -0,0 +1,56 @@ +--echo # +--echo # MDEV-5345 - Deadlock between mysql_change_user(), SHOW VARIABLES and +--echo # INSTALL PLUGIN +--echo # + +# Prepare test +delimiter |; +CREATE PROCEDURE p_install(x INT) +BEGIN + DECLARE CONTINUE HANDLER FOR 1126 BEGIN END; + WHILE x DO + SET x= x - 1; + INSTALL PLUGIN no_such_plugin SONAME 'no_such_object'; + END WHILE; +END| + +CREATE PROCEDURE p_show_vars(x INT) +WHILE x DO + SET x= x - 1; + SHOW VARIABLES; +END WHILE| +delimiter ;| + +connect(con1, localhost, root,,); +connect(con2, localhost, root,,); + +# Start test +connection con1; +--send CALL p_install(100) + +connection con2; +--send CALL p_show_vars(100) + +connection default; + +disable_result_log; +let $i= 100; +while ($i) +{ + change_user; + dec $i; +} + +# Cleanup +connection con1; +reap; +connection con2; +reap; +connection default; +enable_result_log; + +disconnect con1; +disconnect con2; +USE test; +DROP PROCEDURE p_install; +DROP PROCEDURE p_show_vars; |