645 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			645 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | -- source include/not_embedded.inc | ||
|  | 
 | ||
|  | # Save the initial number of concurrent sessions | ||
|  | --source include/count_sessions.inc | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t1,t2; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # Test to see if select will get the lock ahead of low priority update | ||
|  | 
 | ||
|  | connect (locker,localhost,root,,); | ||
|  | connect (reader,localhost,root,,); | ||
|  | connect (writer,localhost,root,,); | ||
|  | 
 | ||
|  | connection locker; | ||
|  | create table t1(n int); | ||
|  | insert into t1 values (1); | ||
|  | lock tables t1 write; | ||
|  | connection writer; | ||
|  | send | ||
|  | update low_priority t1 set n = 4; | ||
|  | connection reader; | ||
|  | # Sleep a bit till the update of connection writer is in work and hangs | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "update low_priority t1 set n = 4"; | ||
|  | --source include/wait_condition.inc | ||
|  | send | ||
|  | select n from t1; | ||
|  | connection locker; | ||
|  | # Sleep a bit till the select of connection reader is in work and hangs | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "select n from t1"; | ||
|  | --source include/wait_condition.inc | ||
|  | unlock tables; | ||
|  | connection writer; | ||
|  | reap; | ||
|  | connection reader; | ||
|  | reap; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | connection locker; | ||
|  | create table t1(n int); | ||
|  | insert into t1 values (1); | ||
|  | lock tables t1 read; | ||
|  | connection writer; | ||
|  | send | ||
|  | update low_priority t1 set n = 4; | ||
|  | connection reader; | ||
|  | # Sleep a bit till the update of connection writer is in work and hangs | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "update low_priority t1 set n = 4"; | ||
|  | --source include/wait_condition.inc | ||
|  | select n from t1; | ||
|  | connection locker; | ||
|  | unlock tables; | ||
|  | connection writer; | ||
|  | reap; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Test problem when using locks with multi-updates | ||
|  | # It should not block when multi-update is reading on a read-locked table | ||
|  | # | ||
|  | 
 | ||
|  | connection locker; | ||
|  | create table t1 (a int, b int); | ||
|  | create table t2 (c int, d int); | ||
|  | insert into t1 values(1,1); | ||
|  | insert into t1 values(2,2); | ||
|  | insert into t2 values(1,2); | ||
|  | lock table t1 read; | ||
|  | connection writer; | ||
|  | update t1,t2 set c=a where b=d; | ||
|  | connection reader; | ||
|  | select c from t2; | ||
|  | connection locker; | ||
|  | drop table t1; | ||
|  | drop table t2; | ||
|  | 
 | ||
|  | # | ||
|  | # Test problem when using locks on many tables and dropping a table that | ||
|  | # is to-be-locked by another thread | ||
|  | # | ||
|  | # | ||
|  | connection locker; | ||
|  | create table t1 (a int); | ||
|  | create table t2 (a int); | ||
|  | lock table t1 write, t2 write; | ||
|  | connection reader; | ||
|  | send | ||
|  | insert t1 select * from t2; | ||
|  | connection locker; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "insert t1 select * from t2"; | ||
|  | --source include/wait_condition.inc | ||
|  | drop table t2; | ||
|  | connection reader; | ||
|  | --error ER_NO_SUCH_TABLE | ||
|  | reap; | ||
|  | connection locker; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Same test as above, but with the dropped table locked twice | ||
|  | # | ||
|  | 
 | ||
|  | connection locker; | ||
|  | create table t1 (a int); | ||
|  | create table t2 (a int); | ||
|  | lock table t1 write, t2 write, t1 as t1_2 write, t2 as t2_2 write; | ||
|  | connection reader; | ||
|  | send | ||
|  | insert t1 select * from t2; | ||
|  | connection locker; | ||
|  | # Sleep a bit till the insert of connection reader is in work and hangs | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "insert t1 select * from t2"; | ||
|  | --source include/wait_condition.inc | ||
|  | drop table t2; | ||
|  | connection reader; | ||
|  | --error ER_NO_SUCH_TABLE | ||
|  | reap; | ||
|  | connection locker; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | 
 | ||
|  | --echo End of 4.1 tests | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#9998 MySQL client hangs on USE "database" | ||
|  | # | ||
|  | create table t1(a int); | ||
|  | lock tables t1 write; | ||
|  | connection reader; | ||
|  | show columns from t1; | ||
|  | connection locker; | ||
|  | unlock tables; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#16986 Deadlock condition with MyISAM tables | ||
|  | # | ||
|  | 
 | ||
|  | # Need a matching user in mysql.user for multi-table select | ||
|  | --source include/add_anonymous_users.inc | ||
|  | 
 | ||
|  | connection locker; | ||
|  | USE mysql; | ||
|  | LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE; | ||
|  | FLUSH TABLES; | ||
|  | # | ||
|  | connection reader; | ||
|  | USE mysql; | ||
|  | # Note:  This must be a multi-table select, otherwise the deadlock will not occur | ||
|  | send | ||
|  | SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1; | ||
|  | # | ||
|  | connection locker; | ||
|  | # Sleep a bit till the select of connection reader is in work and hangs | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Waiting for table" and info = | ||
|  |   "SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1"; | ||
|  | --source include/wait_condition.inc | ||
|  | # Make test case independent from earlier grants. | ||
|  | --replace_result "Table is already up to date" "OK" | ||
|  | OPTIMIZE TABLES columns_priv, db, host, user; | ||
|  | UNLOCK TABLES; | ||
|  | # | ||
|  | connection reader; | ||
|  | reap; | ||
|  | USE test; | ||
|  | # | ||
|  | connection locker; | ||
|  | use test; | ||
|  | # | ||
|  | connection default; | ||
|  | # | ||
|  | # Test if CREATE TABLE with LOCK TABLE deadlocks. | ||
|  | # | ||
|  | connection writer; | ||
|  | CREATE TABLE t1 (c1 int); | ||
|  | LOCK TABLE t1 WRITE; | ||
|  | # | ||
|  | # This waits until t1 is unlocked. | ||
|  | connection locker; | ||
|  | send | ||
|  | FLUSH TABLES WITH READ LOCK; | ||
|  | # | ||
|  | connection writer; | ||
|  | # Sleep a bit till the flush of connection locker is in work and hangs | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Flushing tables" and info = "FLUSH TABLES WITH READ LOCK"; | ||
|  | --source include/wait_condition.inc | ||
|  | # This must not block. | ||
|  | CREATE TABLE t2 (c1 int); | ||
|  | UNLOCK TABLES; | ||
|  | # | ||
|  | # This awakes now. | ||
|  | connection locker; | ||
|  | reap; | ||
|  | UNLOCK TABLES; | ||
|  | # | ||
|  | connection default; | ||
|  | DROP TABLE t1, t2; | ||
|  | # | ||
|  | # Test if CREATE TABLE SELECT with LOCK TABLE deadlocks. | ||
|  | # | ||
|  | connection writer; | ||
|  | CREATE TABLE t1 (c1 int); | ||
|  | LOCK TABLE t1 WRITE; | ||
|  | # | ||
|  | # This waits until t1 is unlocked. | ||
|  | connection locker; | ||
|  | send | ||
|  | FLUSH TABLES WITH READ LOCK; | ||
|  | # | ||
|  | # This must not block. | ||
|  | connection writer; | ||
|  | # Sleep a bit till the flush of connection locker is in work and hangs | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Flushing tables" and info = "FLUSH TABLES WITH READ LOCK"; | ||
|  | --source include/wait_condition.inc | ||
|  | --error ER_TABLE_NOT_LOCKED | ||
|  | CREATE TABLE t2 AS SELECT * FROM t1; | ||
|  | UNLOCK TABLES; | ||
|  | # | ||
|  | # This awakes now. | ||
|  | connection locker; | ||
|  | reap; | ||
|  | UNLOCK TABLES; | ||
|  | # | ||
|  | connection default; | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | --source include/delete_anonymous_users.inc | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#19815 CREATE/RENAME/DROP DATABASE can deadlock on a global read lock | ||
|  | # | ||
|  | connect (con1,localhost,root,,); | ||
|  | connect (con2,localhost,root,,); | ||
|  | # | ||
|  | connection con1; | ||
|  | CREATE DATABASE mysqltest_1; | ||
|  | FLUSH TABLES WITH READ LOCK; | ||
|  | # | ||
|  | # With bug in place: acquire LOCK_mysql_create_table and | ||
|  | # wait in wait_if_global_read_lock(). | ||
|  | connection con2; | ||
|  | send | ||
|  | DROP DATABASE mysqltest_1; | ||
|  | # | ||
|  | # With bug in place: try to acquire LOCK_mysql_create_table... | ||
|  | # When fixed: Reject dropping db because of the read lock. | ||
|  | connection con1; | ||
|  | # Wait a bit so that the session con2 is in state "Waiting for release of readlock" | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Waiting for release of readlock" | ||
|  |   and info = "DROP DATABASE mysqltest_1"; | ||
|  | --source include/wait_condition.inc | ||
|  | --error ER_CANT_UPDATE_WITH_READLOCK | ||
|  | DROP DATABASE mysqltest_1; | ||
|  | UNLOCK TABLES; | ||
|  | # | ||
|  | connection con2; | ||
|  | reap; | ||
|  | # | ||
|  | connection default; | ||
|  | disconnect con1; | ||
|  | disconnect con2; | ||
|  | # This must have been dropped by connection 2 already, | ||
|  | # which waited until the global read lock was released. | ||
|  | --error ER_DB_DROP_EXISTS | ||
|  | DROP DATABASE mysqltest_1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#17264 MySQL Server freeze | ||
|  | # | ||
|  | connection locker; | ||
|  | # Disable warnings to allow test to run also without InnoDB | ||
|  | --disable_warnings | ||
|  | create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) engine=innodb; | ||
|  | --enable_warnings | ||
|  | lock tables t1 write; | ||
|  | connection writer; | ||
|  | send | ||
|  | alter table t1 auto_increment=0; | ||
|  | connection reader; | ||
|  | # Wait till connection writer is blocked | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "alter table t1 auto_increment=0"; | ||
|  | --source include/wait_condition.inc | ||
|  | send | ||
|  | alter table t1 auto_increment=0; | ||
|  | connection locker; | ||
|  | # Wait till connection reader is blocked | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 2 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "alter table t1 auto_increment=0"; | ||
|  | --source include/wait_condition.inc | ||
|  | unlock tables; | ||
|  | connection writer; | ||
|  | reap; | ||
|  | connection reader; | ||
|  | reap; | ||
|  | connection locker; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#43230: SELECT ... FOR UPDATE can hang with FLUSH TABLES WITH READ LOCK indefinitely | ||
|  | # | ||
|  | 
 | ||
|  | connect (con1,localhost,root,,); | ||
|  | connect (con2,localhost,root,,); | ||
|  | connect (con3,localhost,root,,); | ||
|  | connect (con4,localhost,root,,); | ||
|  | connect (con5,localhost,root,,); | ||
|  | 
 | ||
|  | create table t1 (a int); | ||
|  | create table t2 like t1; | ||
|  | 
 | ||
|  | connection con1; | ||
|  | --echo # con1 | ||
|  | lock tables t1 write; | ||
|  | connection con2; | ||
|  | --echo # con2 | ||
|  | send flush tables with read lock; | ||
|  | connection con5; | ||
|  | --echo # con5 | ||
|  | let $show_statement= SHOW PROCESSLIST; | ||
|  | let $field= State; | ||
|  | let $condition= = 'Flushing tables'; | ||
|  | --source include/wait_show_condition.inc | ||
|  | --echo # global read lock is taken | ||
|  | connection con3; | ||
|  | --echo # con3 | ||
|  | send select * from t2 for update; | ||
|  | connection con5; | ||
|  | let $show_statement= SHOW PROCESSLIST; | ||
|  | let $field= State; | ||
|  | let $condition= = 'Waiting for release of readlock'; | ||
|  | --source include/wait_show_condition.inc | ||
|  | --echo # waiting for release of read lock | ||
|  | connection con4; | ||
|  | --echo # con4 | ||
|  | --echo # would hang and later cause a deadlock | ||
|  | flush tables t2; | ||
|  | connection con1; | ||
|  | --echo # clean up | ||
|  | unlock tables; | ||
|  | connection con2; | ||
|  | --reap | ||
|  | unlock tables; | ||
|  | connection con3; | ||
|  | --reap | ||
|  | connection default; | ||
|  | disconnect con5; | ||
|  | disconnect con4; | ||
|  | disconnect con3; | ||
|  | disconnect con2; | ||
|  | disconnect con1; | ||
|  | 
 | ||
|  | drop table t1,t2; | ||
|  | 
 | ||
|  | --echo # | ||
|  | --echo # Lightweight version: | ||
|  | --echo # Ensure that the wait for a GRL is done before opening tables. | ||
|  | --echo # | ||
|  | 
 | ||
|  | connect (con1,localhost,root,,); | ||
|  | connect (con2,localhost,root,,); | ||
|  | 
 | ||
|  | create table t1 (a int); | ||
|  | create table t2 like t1; | ||
|  | 
 | ||
|  | --echo # | ||
|  | --echo # UPDATE | ||
|  | --echo # | ||
|  | 
 | ||
|  | connection default; | ||
|  | --echo # default | ||
|  | flush tables with read lock; | ||
|  | connection con1; | ||
|  | --echo # con1 | ||
|  | send update t2 set a = 1; | ||
|  | connection default; | ||
|  | --echo # default | ||
|  | let $show_statement= SHOW PROCESSLIST; | ||
|  | let $field= State; | ||
|  | let $condition= = 'Waiting for release of readlock'; | ||
|  | --source include/wait_show_condition.inc | ||
|  | --echo # statement is waiting for release of read lock | ||
|  | connection con2; | ||
|  | --echo # con2 | ||
|  | flush table t2; | ||
|  | connection default; | ||
|  | --echo # default | ||
|  | unlock tables; | ||
|  | connection con1; | ||
|  | --echo # con1 | ||
|  | --reap | ||
|  | 
 | ||
|  | --echo # | ||
|  | --echo # LOCK TABLES .. WRITE | ||
|  | --echo # | ||
|  | 
 | ||
|  | connection default; | ||
|  | --echo # default | ||
|  | flush tables with read lock; | ||
|  | connection con1; | ||
|  | --echo # con1 | ||
|  | send lock tables t2 write; | ||
|  | connection default; | ||
|  | --echo # default | ||
|  | let $show_statement= SHOW PROCESSLIST; | ||
|  | let $field= State; | ||
|  | let $condition= = 'Waiting for release of readlock'; | ||
|  | --source include/wait_show_condition.inc | ||
|  | --echo # statement is waiting for release of read lock | ||
|  | connection con2; | ||
|  | --echo # con2 | ||
|  | flush table t2; | ||
|  | connection default; | ||
|  | --echo # default | ||
|  | unlock tables; | ||
|  | connection con1; | ||
|  | --echo # con1 | ||
|  | --reap | ||
|  | unlock tables; | ||
|  | 
 | ||
|  | connection default; | ||
|  | disconnect con2; | ||
|  | disconnect con1; | ||
|  | 
 | ||
|  | drop table t1,t2; | ||
|  | 
 | ||
|  | 
 | ||
|  | --echo End of 5.0 tests | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#21281 Pending write lock is incorrectly removed when its | ||
|  | #           statement being KILLed | ||
|  | # | ||
|  | create table t1 (i int); | ||
|  | connection locker; | ||
|  | lock table t1 read; | ||
|  | connection writer; | ||
|  | send | ||
|  | update t1 set i= 10; | ||
|  | connection reader; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "update t1 set i= 10"; | ||
|  | --source include/wait_condition.inc | ||
|  | send | ||
|  | select * from t1; | ||
|  | connection default; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "select * from t1"; | ||
|  | --source include/wait_condition.inc | ||
|  | let $ID= `select id from information_schema.processlist where state = "Locked" and info = "update t1 set i= 10"`; | ||
|  | --replace_result $ID ID | ||
|  | eval kill query $ID; | ||
|  | connection reader; | ||
|  | --reap | ||
|  | connection writer; | ||
|  | --error ER_QUERY_INTERRUPTED | ||
|  | --reap | ||
|  | connection locker; | ||
|  | unlock tables; | ||
|  | connection default; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#25856 HANDLER table OPEN in one connection lock DROP TABLE in another one | ||
|  | # | ||
|  | --disable_warnings | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | create table t1 (a int) ENGINE=MEMORY; | ||
|  | --echo --> client 2 | ||
|  | connection locker; | ||
|  | --error ER_ILLEGAL_HA | ||
|  | handler t1 open; | ||
|  | --echo --> client 1 | ||
|  | connection default; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | 
 | ||
|  | # Disconnect sessions used in many subtests above | ||
|  | disconnect locker; | ||
|  | disconnect reader; | ||
|  | disconnect writer; | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#32395 Alter table under a impending global read lock causes a server crash | ||
|  | # | ||
|  | 
 | ||
|  | # | ||
|  | # Test ALTER TABLE under LOCK TABLES and FLUSH TABLES WITH READ LOCK | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | create table t1 (i int); | ||
|  | connect (flush,localhost,root,,test,,); | ||
|  | connection default; | ||
|  | --echo connection: default | ||
|  | lock tables t1 write; | ||
|  | connection flush; | ||
|  | --echo connection: flush | ||
|  | --send flush tables with read lock; | ||
|  | connection default; | ||
|  | --echo connection: default | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Flushing tables"; | ||
|  | --source include/wait_condition.inc | ||
|  | alter table t1 add column j int; | ||
|  | connect (insert,localhost,root,,test,,); | ||
|  | connection insert; | ||
|  | --echo connection: insert | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Flushing tables"; | ||
|  | --source include/wait_condition.inc | ||
|  | --send insert into t1 values (1,2); | ||
|  | --echo connection: default | ||
|  | connection default; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Waiting for release of readlock"; | ||
|  | --source include/wait_condition.inc | ||
|  | unlock tables; | ||
|  | connection flush; | ||
|  | --echo connection: flush | ||
|  | --reap | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Waiting for release of readlock"; | ||
|  | --source include/wait_condition.inc | ||
|  | select * from t1; | ||
|  | unlock tables; | ||
|  | connection insert; | ||
|  | --reap | ||
|  | connection default; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from t1; | ||
|  | --source include/wait_condition.inc | ||
|  | select * from t1; | ||
|  | drop table t1; | ||
|  | disconnect flush; | ||
|  | disconnect insert; | ||
|  | 
 | ||
|  | # | ||
|  | # Test that FLUSH TABLES under LOCK TABLES protects write locked tables | ||
|  | # from a impending FLUSH TABLES WITH READ LOCK | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | create table t1 (i int); | ||
|  | connect (flush,localhost,root,,test,,); | ||
|  | connection default; | ||
|  | --echo connection: default | ||
|  | lock tables t1 write; | ||
|  | connection flush; | ||
|  | --echo connection: flush | ||
|  | --send flush tables with read lock; | ||
|  | connection default; | ||
|  | --echo connection: default | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Flushing tables"; | ||
|  | --source include/wait_condition.inc | ||
|  | flush tables; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Flushing tables"; | ||
|  | --source include/wait_condition.inc | ||
|  | unlock tables; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 0 from information_schema.processlist | ||
|  |   where state = "Flushing tables"; | ||
|  | --source include/wait_condition.inc | ||
|  | connection flush; | ||
|  | --reap | ||
|  | connection default; | ||
|  | disconnect flush; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#30331 Table_locks_waited shows inaccurate values | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t1,t2; | ||
|  | --enable_warnings | ||
|  | create table t1 (a int); | ||
|  | flush status; | ||
|  | lock tables t1 read; | ||
|  | let $tlwa= `show status like 'Table_locks_waited'`; | ||
|  | connect (waiter,localhost,root,,); | ||
|  | connection waiter; | ||
|  | --send insert into t1 values(1); | ||
|  | connection default; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where state = "Locked" and info = "insert into t1 values(1)"; | ||
|  | --source include/wait_condition.inc | ||
|  | let $tlwb= `show status like 'Table_locks_waited'`; | ||
|  | unlock tables; | ||
|  | connection waiter; | ||
|  | --reap | ||
|  | connection default; | ||
|  | drop table t1; | ||
|  | disconnect waiter; | ||
|  | --disable_query_log | ||
|  | eval SET @tlwa= SUBSTRING_INDEX('$tlwa', '	', -1); | ||
|  | eval SET @tlwb= SUBSTRING_INDEX('$tlwb', '	', -1); | ||
|  | --enable_query_log | ||
|  | select @tlwa < @tlwb; | ||
|  | 
 | ||
|  | --echo End of 5.1 tests | ||
|  | 
 | ||
|  | # Wait till all disconnects are completed | ||
|  | --source include/wait_until_count_sessions.inc | ||
|  | 
 |