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:
parent
0556a46caa
commit
8ae680f8a9
12
sql/mdl.cc
12
sql/mdl.cc
@ -736,6 +736,14 @@ end:
|
|||||||
return res;
|
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;
|
const MDL_lock_strategy *m_strategy;
|
||||||
private:
|
private:
|
||||||
static const MDL_backup_lock m_backup_lock_strategy;
|
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;
|
ticket->m_time= mdl_request->ticket->m_time;
|
||||||
mdl_request->ticket= ticket;
|
mdl_request->ticket= ticket;
|
||||||
|
|
||||||
mysql_prlock_wrlock(&ticket->m_lock->m_rwlock);
|
ticket->m_lock->add_cloned_ticket(ticket);
|
||||||
ticket->m_lock->m_granted.add_ticket(ticket);
|
|
||||||
mysql_prlock_unlock(&ticket->m_lock->m_rwlock);
|
|
||||||
|
|
||||||
m_tickets[mdl_request->duration].push_front(ticket);
|
m_tickets[mdl_request->duration].push_front(ticket);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user