mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
mysqltest: Write command to be executed to the log BEFORE executing the command.
Fixed race condition in event that could cause hang when stopping event scheduler with SET GLOBAL event_scheduler=OFF client/mysqltest.cc: Write command to be executed to the log BEFORE executing the command. This makes it easier to debug crashes as the log will contain the fatal command. mysql-test/r/mysqltest.result: Updated results (we now get more things logged) sql/event_queue.cc: Fixed race condition in event that could cause hang when stopping event scheduler with SET GLOBAL event_scheduler=OFF. The reason was that a kill signal could be sent between last check of thd->killed and before thd->enter_cond() in which case the signal would be missed and we would be stuck in Event_scheduler::stop() forever.
This commit is contained in:
@ -734,12 +734,14 @@ Event_queue::cond_wait(THD *thd, struct timespec *abstime, const char* msg,
|
||||
|
||||
thd->enter_cond(&COND_queue_state, &LOCK_event_queue, msg);
|
||||
|
||||
DBUG_PRINT("info", ("pthread_cond_%swait", abstime? "timed":""));
|
||||
if (!abstime)
|
||||
pthread_cond_wait(&COND_queue_state, &LOCK_event_queue);
|
||||
else
|
||||
pthread_cond_timedwait(&COND_queue_state, &LOCK_event_queue, abstime);
|
||||
|
||||
if (!thd->killed)
|
||||
{
|
||||
DBUG_PRINT("info", ("pthread_cond_%swait", abstime ? "timed" : ""));
|
||||
if (!abstime)
|
||||
pthread_cond_wait(&COND_queue_state, &LOCK_event_queue);
|
||||
else
|
||||
pthread_cond_timedwait(&COND_queue_state, &LOCK_event_queue, abstime);
|
||||
}
|
||||
mutex_last_locked_in_func= func;
|
||||
mutex_last_locked_at_line= line;
|
||||
mutex_queue_data_locked= TRUE;
|
||||
|
Reference in New Issue
Block a user