Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
5.5.28, 5.3.9, 5.2.12, 5.1.62
-
None
-
None
Description
In this code:
5660 int TC_LOG_MMAP::log_xid(THD *thd, my_xid xid)
|
5661 {
|
...
|
5713 for (;;)
|
5714 {
|
5715 int not_dirty = p->state != DIRTY;
|
5716 pthread_mutex_unlock(&p->lock);
|
5717 if (not_dirty || !syncing)
|
5718 break;
|
...
|
5733 pthread_mutex_unlock(&p->lock);
|
the mutex on the line 5716 is unlocked too early. After the break on the line 5718 the loop with end with the mutex being unlocked, while the code below assumes that it is locked.