mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
e1e5ce0da2
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.
56 lines
926 B
Text
56 lines
926 B
Text
--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;
|