mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-28 20:02:00 +03:00
MDEV-29512 deadlock between commit monitor and THD::LOCK_thd_data mutex
Grabbing back the lock later, after set_position has been called. This is because set_position may have to wait for correct seqno position and calls sync wait in galera side. Such wait would happen while holding the lock, which would case hanging like reported in MDEV-29512 PR for MDEV-29512 contains a mtr test for reproducing one such deadlock scenario.
This commit is contained in:
@ -791,13 +791,14 @@ int wsrep::transaction::release_commit_order(
|
||||
{
|
||||
lock.unlock();
|
||||
int ret(provider().commit_order_enter(ws_handle_, ws_meta_));
|
||||
lock.lock();
|
||||
if (!ret)
|
||||
{
|
||||
server_service_.set_position(client_service_, ws_meta_.gtid());
|
||||
ret = provider().commit_order_leave(ws_handle_, ws_meta_,
|
||||
apply_error_buf_);
|
||||
}
|
||||
// grabbing lock here, as set_position may call for sync wait in galera side
|
||||
lock.lock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user