# # Bug#38231 Innodb crash in lock_reset_all_on_table() on TRUNCATE + LOCK / UNLOCK # http://bugs.mysql.com/38231 # -- source include/have_innodb.inc SET storage_engine=InnoDB; # we care only that the following SQL commands do not crash the server -- disable_query_log -- disable_result_log DROP TABLE IF EXISTS bug38231_1; CREATE TABLE bug38231_1 (a INT); -- connect (lock_gain,localhost,root,,) -- connect (lock_wait1,localhost,root,,) -- connect (lock_wait2,localhost,root,,) -- connect (truncate_wait,localhost,root,,) -- connection lock_gain SET autocommit=0; LOCK TABLE bug38231_1 WRITE; -- connection lock_wait1 SET autocommit=0; -- send LOCK TABLE bug38231_1 WRITE; -- connection lock_wait2 SET autocommit=0; -- send LOCK TABLE bug38231_1 WRITE; -- connection truncate_wait -- send TRUNCATE TABLE bug38231_1; -- connection lock_gain # this crashes the server if the bug is present UNLOCK TABLES; # clean up # do not clean up - we do not know which of the three has been released # so the --reap command may hang because the executing command is still # running/waiting #-- connection lock_wait1 #-- reap #UNLOCK TABLES; # #-- connection lock_wait2 #-- reap #UNLOCK TABLES; # #-- connection truncate_wait #-- reap -- connection default -- disconnect lock_gain -- disconnect lock_wait1 -- disconnect lock_wait2 -- disconnect truncate_wait DROP TABLE bug38231_1; # test that TRUNCATE works with row-level locks DROP TABLE IF EXISTS bug38231_2; CREATE TABLE bug38231_2 (a INT); -- enable_query_log -- enable_result_log INSERT INTO bug38231_2 VALUES (1), (10), (300); -- connect (con4,localhost,root,,) -- connection con4 SET autocommit=0; SELECT * FROM bug38231_2 FOR UPDATE; -- connection default TRUNCATE TABLE bug38231_2; -- connection con4 COMMIT; -- connection default -- disconnect con4 DROP TABLE bug38231_2;