summaryrefslogtreecommitdiff
path: root/mysql-test/t
diff options
context:
space:
mode:
authorKristian Nielsen <knielsen@knielsen-hq.org>2014-10-31 12:48:17 +0100
committerKristian Nielsen <knielsen@knielsen-hq.org>2014-10-31 12:48:17 +0100
commitbad5fdec1843527fbbf87ef5e6f82519ffef3935 (patch)
tree1d15234ccb0ec16ea186078995bc6c942c512c6b /mysql-test/t
parent52fb08ac31baef24ca5f5f3b62ccbfcb9f0d083b (diff)
downloadmariadb-git-bad5fdec1843527fbbf87ef5e6f82519ffef3935.tar.gz
Fix sporadic test failure in main.processlist
The test runs a query in one thread, then in another queries the processlist and expects to find the first thread in the COM_SLEEP state. The problem is that the thread signals completion to the client before changing to COM_SLEEP state, so there is a window where the other thread can see the wrong state. A previous attempt to fix this was ineffective. It set a DEBUG_SYNC to handle proper waiting, but unfortunately that DEBUG_SYNC point ended up triggering already at the end of SET DEBUG_SYNC=xxx, so the wait was ineffective. Fix it properly now (hopefully) by ensuring that we wait for the DEBUG_SYNC point to trigger at the end of the SELECT SLEEP(), not just at the end of SET DEBUG_SYNC=xxx.
Diffstat (limited to 'mysql-test/t')
-rw-r--r--mysql-test/t/processlist.test10
1 files changed, 9 insertions, 1 deletions
diff --git a/mysql-test/t/processlist.test b/mysql-test/t/processlist.test
index 12dd665b71b..9c555c0f9fb 100644
--- a/mysql-test/t/processlist.test
+++ b/mysql-test/t/processlist.test
@@ -28,7 +28,15 @@ connection default;
#
connection con1;
-SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done';
+# Trigger a signal once the thread has gone from "Query" to "Sleep" command
+# state. Note we need to execute this twice: Once at the end of SET DEBUG_SYNC,
+# and once for the intended time, at the end of SELECT SLEEP().
+SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2';
+connection default;
+# Wait for and clear the first signal set during SET DEBUG_SYNC.
+SET DEBUG_SYNC= 'now WAIT_FOR query_done';
+SET DEBUG_SYNC= 'now SIGNAL nosignal';
+connection con1;
select sleep(5); #run a query that will take some time
connection default;