From 8ae680f8a95561f1395c3d843febab3a76539c5c Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Wed, 30 Apr 2025 23:56:15 +0400 Subject: [PATCH] MDL_lock encapsulation: add_cloned_ticket() Avoid accessing MDL_lock::m_granted and MDL_lock::m_rwlock from MDL_context::clone_ticket(), use MDL_lock::add_cloned_ticket() instead. This is part of broader cleanup, which aims to make large part of MDL_lock members private. It is needed to simplify further work on MDEV-19749 - MDL scalability regression after backup locks. --- sql/mdl.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sql/mdl.cc b/sql/mdl.cc index dedad4f048c..08a063607e1 100644 --- a/sql/mdl.cc +++ b/sql/mdl.cc @@ -736,6 +736,14 @@ end: return res; } + + void add_cloned_ticket(MDL_ticket *ticket) + { + mysql_prlock_wrlock(&m_rwlock); + m_granted.add_ticket(ticket); + mysql_prlock_unlock(&m_rwlock); + } + const MDL_lock_strategy *m_strategy; private: static const MDL_backup_lock m_backup_lock_strategy; @@ -2211,9 +2219,7 @@ MDL_context::clone_ticket(MDL_request *mdl_request) ticket->m_time= mdl_request->ticket->m_time; mdl_request->ticket= ticket; - mysql_prlock_wrlock(&ticket->m_lock->m_rwlock); - ticket->m_lock->m_granted.add_ticket(ticket); - mysql_prlock_unlock(&ticket->m_lock->m_rwlock); + ticket->m_lock->add_cloned_ticket(ticket); m_tickets[mdl_request->duration].push_front(ticket);