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.
This commit is contained in:
Sergey Vojtovich 2025-04-30 23:56:15 +04:00 committed by Sergei Golubchik
parent 0556a46caa
commit 8ae680f8a9

View File

@ -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);