From 7ee6a3ae5f805d84df6d5c78856b34fa9c2696a4 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Thu, 25 Jun 2020 09:58:42 +0200 Subject: MDEV-22950 followup Deadlock in DbugParse, on Linux. In 10.1, DBUG recursive mutex was improperly implemented. CODE_STATE::locked counter was never updated. Copy the code around LockMutex/UnlockMutex from 10.2 --- dbug/dbug.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'dbug') diff --git a/dbug/dbug.c b/dbug/dbug.c index b0e1b0eaae6..007769c3c37 100644 --- a/dbug/dbug.c +++ b/dbug/dbug.c @@ -330,10 +330,13 @@ static void LockMutex(CODE_STATE *cs) { if (!cs->locked) pthread_mutex_lock(&THR_LOCK_dbug); + cs->locked++; } static void UnlockMutex(CODE_STATE *cs) { - if (!cs->locked) + --cs->locked; + assert(cs->locked >= 0); + if (cs->locked == 0) pthread_mutex_unlock(&THR_LOCK_dbug); } static void LockIfInitSettings(CODE_STATE *cs) -- cgit v1.2.1