diff options
author | Kristian Nielsen <knielsen@knielsen-hq.org> | 2014-10-31 12:48:17 +0100 |
---|---|---|
committer | Kristian Nielsen <knielsen@knielsen-hq.org> | 2014-10-31 12:48:17 +0100 |
commit | bad5fdec1843527fbbf87ef5e6f82519ffef3935 (patch) | |
tree | 1d15234ccb0ec16ea186078995bc6c942c512c6b /mysql-test/t | |
parent | 52fb08ac31baef24ca5f5f3b62ccbfcb9f0d083b (diff) | |
download | mariadb-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.test | 10 |
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; |