diff --git a/mysql-test/r/processlist.result b/mysql-test/r/processlist.result index 127fa96b84b..af97aba6634 100644 --- a/mysql-test/r/processlist.result +++ b/mysql-test/r/processlist.result @@ -1,15 +1,17 @@ SET DEBUG_SYNC = 'dispatch_command_before_set_time WAIT_FOR do_set_time'; SELECT 1; SET DEBUG_SYNC = 'fill_schema_processlist_after_unow SIGNAL do_set_time WAIT_FOR fill_schema_proceed'; -SELECT INFO,TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO IS NULL; +SELECT ID, TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE CONCAT(":", ID, ":") = ":TID:"; 1 1 SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed'; -INFO TIME TIME_MS -NULL 0 0.000 +ID TIME TIME_MS +TID 0 0.000 +SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done'; select sleep(5); sleep(5) 0 +SET DEBUG_SYNC = 'now WAIT_FOR query_done'; select command, time < 5 from information_schema.processlist where id != connection_id(); command time < 5 Sleep 1 diff --git a/mysql-test/t/processlist.test b/mysql-test/t/processlist.test index 7a2b33699d5..12dd665b71b 100644 --- a/mysql-test/t/processlist.test +++ b/mysql-test/t/processlist.test @@ -4,19 +4,22 @@ source include/have_debug_sync.inc; +let $tid= `SELECT CONNECTION_ID()`; SET DEBUG_SYNC = 'dispatch_command_before_set_time WAIT_FOR do_set_time'; send SELECT 1; connect (con1,localhost,root,,); SET DEBUG_SYNC = 'fill_schema_processlist_after_unow SIGNAL do_set_time WAIT_FOR fill_schema_proceed'; -send SELECT INFO,TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO IS NULL; +--replace_result $tid TID +send_eval SELECT ID, TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE CONCAT(":", ID, ":") = ":$tid:"; connection default; reap; SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed'; connection con1; +--replace_result $tid TID reap; connection default; @@ -25,9 +28,15 @@ connection default; # connection con1; +SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done'; select sleep(5); #run a query that will take some time connection default; +# Need to ensure that the previous query has really completed. Otherwise, +# the select could see the previous query still in "Query" stage in the +# processlist. +SET DEBUG_SYNC = 'now WAIT_FOR query_done'; + # verify that the time in COM_SLEEP doesn't include the query run time select command, time < 5 from information_schema.processlist where id != connection_id(); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e6b67e57f09..0fe3c5b90ea 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1505,6 +1505,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, } MYSQL_COMMAND_DONE(res); } + DEBUG_SYNC(thd,"dispatch_command_end"); /* Check that some variables are reset properly */ DBUG_ASSERT(thd->abort_on_warning == 0);