Skip to content

Commit ecd47cf

Browse files
committed
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.
1 parent fba7170 commit ecd47cf

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

sql/mdl.cc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,14 @@ class MDL_lock
736736
return res;
737737
}
738738

739+
740+
void add_cloned_ticket(MDL_ticket *ticket)
741+
{
742+
mysql_prlock_wrlock(&m_rwlock);
743+
m_granted.add_ticket(ticket);
744+
mysql_prlock_unlock(&m_rwlock);
745+
}
746+
739747
const MDL_lock_strategy *m_strategy;
740748
private:
741749
static const MDL_backup_lock m_backup_lock_strategy;
@@ -2211,9 +2219,7 @@ MDL_context::clone_ticket(MDL_request *mdl_request)
22112219
ticket->m_time= mdl_request->ticket->m_time;
22122220
mdl_request->ticket= ticket;
22132221

2214-
mysql_prlock_wrlock(&ticket->m_lock->m_rwlock);
2215-
ticket->m_lock->m_granted.add_ticket(ticket);
2216-
mysql_prlock_unlock(&ticket->m_lock->m_rwlock);
2222+
ticket->m_lock->add_cloned_ticket(ticket);
22172223

22182224
m_tickets[mdl_request->duration].push_front(ticket);
22192225

0 commit comments

Comments
 (0)