diff --git a/mysql-test/main/sp-no-valgrind.result b/mysql-test/main/sp-no-valgrind.result new file mode 100644 index 00000000000..bc5809ba79e --- /dev/null +++ b/mysql-test/main/sp-no-valgrind.result @@ -0,0 +1,25 @@ +# MDEV-20699 do not cache SP in SHOW CREATE +# Warmup round, this might allocate some memory for session variable +# and the output +SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +CREATE PROCEDURE sp0() SELECT 1; +SHOW CREATE PROCEDURE sp0; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +sp0 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp0`() +SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci +DROP PROCEDURE sp0; +SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +CREATE PROCEDURE sp1() SELECT 1; +SHOW CREATE PROCEDURE sp1; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +sp1 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`() +SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci +SELECT VARIABLE_VALUE-@local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +VARIABLE_VALUE-@local_mem_used +0 +DROP PROCEDURE sp1; +# +# End of 10.3 tests +# diff --git a/mysql-test/main/sp-no-valgrind.test b/mysql-test/main/sp-no-valgrind.test new file mode 100644 index 00000000000..89f8250bf72 --- /dev/null +++ b/mysql-test/main/sp-no-valgrind.test @@ -0,0 +1,26 @@ + +--source include/not_valgrind.inc + +--echo # MDEV-20699 do not cache SP in SHOW CREATE +--echo # Warmup round, this might allocate some memory for session variable +--echo # and the output + +SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +CREATE PROCEDURE sp0() SELECT 1; +SHOW CREATE PROCEDURE sp0; +DROP PROCEDURE sp0; + +#Check that CREATE/SHOW does not use memory in caches. +SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +CREATE PROCEDURE sp1() SELECT 1; +SHOW CREATE PROCEDURE sp1; +SELECT VARIABLE_VALUE-@local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +# FIXME: MDEV-26754 main.sp test fails for embedded server +#SELECT VARIABLE_VALUE-@global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; +DROP PROCEDURE sp1; + +--echo # +--echo # End of 10.3 tests +--echo # diff --git a/mysql-test/main/sp.result b/mysql-test/main/sp.result index 135734a513d..6c0dd6d4c8a 100644 --- a/mysql-test/main/sp.result +++ b/mysql-test/main/sp.result @@ -8872,25 +8872,6 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp BEGIN RETURN ''; END' at line 2 -SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -CREATE PROCEDURE sp0() SELECT 1; -SHOW CREATE PROCEDURE sp0; -Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -sp0 STRICT_ALL_TABLES CREATE DEFINER=`root`@`localhost` PROCEDURE `sp0`() -SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci -DROP PROCEDURE sp0; -SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -CREATE PROCEDURE sp1() SELECT 1; -SHOW CREATE PROCEDURE sp1; -Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -sp1 STRICT_ALL_TABLES CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`() -SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci -SELECT VARIABLE_VALUE-@local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -VARIABLE_VALUE-@local_mem_used -0 -DROP PROCEDURE sp1; # End of 10.3 tests # # Start of 10.4 tests diff --git a/mysql-test/main/sp.test b/mysql-test/main/sp.test index 18e3e1bd499..681ffa3fb33 100644 --- a/mysql-test/main/sp.test +++ b/mysql-test/main/sp.test @@ -10419,24 +10419,6 @@ END; $$ DELIMITER ;$$ -# MDEV-20699 do not cache SP in SHOW CREATE -# Warmup round, this might allocate some memory for session variable -# and the output -SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -CREATE PROCEDURE sp0() SELECT 1; -SHOW CREATE PROCEDURE sp0; -DROP PROCEDURE sp0; - -#Check that CREATE/SHOW does not use memory in caches. -SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -CREATE PROCEDURE sp1() SELECT 1; -SHOW CREATE PROCEDURE sp1; -SELECT VARIABLE_VALUE-@local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -# FIXME: MDEV-26754 main.sp test fails for embedded server -#SELECT VARIABLE_VALUE-@global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED'; -DROP PROCEDURE sp1; --echo # End of 10.3 tests diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index cdf7b0394a5..18f8144c019 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -9374,8 +9374,8 @@ static my_bool kill_threads_callback(THD *thd, kill_threads_callback_arg *arg) return 1; if (!arg->threads_to_kill.push_back(thd, arg->thd->mem_root)) { - mysql_mutex_lock(&thd->LOCK_thd_data); mysql_mutex_lock(&thd->LOCK_thd_kill); // Lock from delete + mysql_mutex_lock(&thd->LOCK_thd_data); } } }