connect con1,localhost,root,,; connect con2,localhost,root,,; connection con1; DROP TABLE IF EXISTS t1; SET DEBUG_SYNC= 'RESET'; CREATE TABLE t1 (kill_id INT) engine = InnoDB; INSERT INTO t1 VALUES(connection_id()); connection default; # Start transaction. BEGIN; INSERT INTO t1 VALUES(connection_id()); # Ensure that COMMIT will pause once it acquires protection # against its global read lock. SET DEBUG_SYNC='ha_commit_trans_after_acquire_commit_lock SIGNAL acquired WAIT_FOR go'; # Sending: COMMIT; connection con1; # Wait till COMMIT acquires protection against global read # lock and pauses. SET DEBUG_SYNC='now WAIT_FOR acquired'; # Sending: FLUSH TABLES WITH READ LOCK; connection con2; SELECT ((@id := kill_id) - kill_id) FROM t1 LIMIT 1; ((@id := kill_id) - kill_id) 0 # Wait till FLUSH TABLES WITH READ LOCK blocks due # to active COMMIT # Kill connection 'con1'. KILL CONNECTION @id; connection con1; # Try to reap FLUSH TABLES WITH READ LOCK, # it fail due to killed statement and connection. Got one of the listed errors connection con2; # Resume COMMIT. SET DEBUG_SYNC='now SIGNAL go'; connection default; # Reaping COMMIT. disconnect con2; DROP TABLE t1; SET DEBUG_SYNC= 'RESET';