1
0
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:
sjaakola
2022-11-08 17:00:53 +02:00
parent b5bddfe4db
commit 2db35f8f6c

View File

@ -791,13 +791,14 @@ int wsrep::transaction::release_commit_order(
{ {
lock.unlock(); lock.unlock();
int ret(provider().commit_order_enter(ws_handle_, ws_meta_)); int ret(provider().commit_order_enter(ws_handle_, ws_meta_));
lock.lock();
if (!ret) if (!ret)
{ {
server_service_.set_position(client_service_, ws_meta_.gtid()); server_service_.set_position(client_service_, ws_meta_.gtid());
ret = provider().commit_order_leave(ws_handle_, ws_meta_, ret = provider().commit_order_leave(ws_handle_, ws_meta_,
apply_error_buf_); apply_error_buf_);
} }
// grabbing lock here, as set_position may call for sync wait in galera side
lock.lock();
return ret; return ret;
} }