DROP TABLE IF EXISTS t1; SET DEBUG_SYNC= 'RESET'; CREATE TABLE t1 (kill_id INT); INSERT INTO t1 VALUES(connection_id()); # Switching to 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; # Switching to '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; # Switching to 'con2'. SELECT ((@id := kill_id) - kill_id) FROM t1 LIMIT 1; ((@id := kill_id) - kill_id) 0 Warnings: Warning 1287 Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'. # Wait till FLUSH TABLES WITH READ LOCK blocks due # to active COMMIT # Kill connection 'con1'. KILL CONNECTION @id; # Switching to 'con1'. # Try to reap FLUSH TABLES WITH READ LOCK, # it fail due to killed statement and connection. Got one of the listed errors # Switching to 'con2'. # Resume COMMIT. SET DEBUG_SYNC='now SIGNAL go'; # Switching to 'default'. # Reaping COMMIT. DROP TABLE t1; SET DEBUG_SYNC= 'RESET';