Commit 260b627f authored by andrey@lmy004's avatar andrey@lmy004

save the modified value and compare it every time. the memory address

is not that reliable (re #17815). Not perfect solution but will work
till #17815 is fixed.
parent e0545884
......@@ -354,17 +354,24 @@ executor_wait_till_next_event_exec(THD *thd)
DBUG_PRINT("evex main thread",("unlocked LOCK_event_arrays"));
if (t2sleep > 0)
{
ulonglong modified= et->modified;
/*
We sleep t2sleep seconds but we check every second whether this thread
has been killed, or there is a new candidate
*/
while (t2sleep-- && !thd->killed && event_executor_running_global_var &&
evex_queue_num_elements(EVEX_EQ_NAME) &&
(evex_queue_first_element(&EVEX_EQ_NAME, Event_timed*) == et))
(evex_queue_first_element(&EVEX_EQ_NAME, Event_timed*) == et &&
evex_queue_first_element(&EVEX_EQ_NAME, Event_timed*)->modified ==
modified))
{
DBUG_PRINT("evex main thread",("will sleep a bit more"));
DBUG_PRINT("evex main thread",("will sleep a bit more."));
my_sleep(1000000);
}
DBUG_PRINT("info",("saved_modified=%llu current=%llu", modified,
evex_queue_num_elements(EVEX_EQ_NAME)?
evex_queue_first_element(&EVEX_EQ_NAME, Event_timed*)->modified:
(ulonglong)~0));
}
int ret= WAIT_STATUS_READY;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment