From 7948a1dc53eccc23095a83daa5fd6b3bfaedf7f2 Mon Sep 17 00:00:00 2001 From: Julius Goryavsky Date: Wed, 27 Oct 2021 11:17:08 +0200 Subject: [PATCH] MDEV-26914: Unreleased mutex in the exec_relay_log_event() function In the replication-related code, in the exec_relay_log_event() (slave.cc) function, where the "data_lock" mutex is captured, this mutex is then not released on one of the early return branches within a specific insert for WSREP, namely under the branch: "if (wsrep_before_statement(thd))". As a result, the mutex remains captured, resulting in errors or hangs. This commit fixes this issue, which is now showing up as intermittent failures in mtr tests for galera and galera_sr suites. --- sql/slave.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sql/slave.cc b/sql/slave.cc index 31bd9372a14..68ddc611c03 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -4124,6 +4124,8 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli, #ifdef WITH_WSREP if (wsrep_before_statement(thd)) { + mysql_mutex_unlock(&rli->data_lock); + delete ev; WSREP_INFO("Wsrep before statement error"); DBUG_RETURN(1); }