From 2db35f8f6c2952f06b2014a05cd9f242e6f44d13 Mon Sep 17 00:00:00 2001 From: sjaakola Date: Tue, 8 Nov 2022 17:00:53 +0200 Subject: [PATCH] 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. --- src/transaction.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/transaction.cpp b/src/transaction.cpp index 854263f..2480374 100644 --- a/src/transaction.cpp +++ b/src/transaction.cpp @@ -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; }