mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-140795: fetch thread state once on fast path for critical sections (#141406)
This commit is contained in:
parent
cb4c87df75
commit
49ff8b6cc0
2 changed files with 65 additions and 37 deletions
|
|
@ -17,10 +17,9 @@ untag_critical_section(uintptr_t tag)
|
|||
#endif
|
||||
|
||||
void
|
||||
_PyCriticalSection_BeginSlow(PyCriticalSection *c, PyMutex *m)
|
||||
_PyCriticalSection_BeginSlow(PyThreadState *tstate, PyCriticalSection *c, PyMutex *m)
|
||||
{
|
||||
#ifdef Py_GIL_DISABLED
|
||||
PyThreadState *tstate = _PyThreadState_GET();
|
||||
// As an optimisation for locking the same object recursively, skip
|
||||
// locking if the mutex is currently locked by the top-most critical
|
||||
// section.
|
||||
|
|
@ -53,11 +52,10 @@ _PyCriticalSection_BeginSlow(PyCriticalSection *c, PyMutex *m)
|
|||
}
|
||||
|
||||
void
|
||||
_PyCriticalSection2_BeginSlow(PyCriticalSection2 *c, PyMutex *m1, PyMutex *m2,
|
||||
_PyCriticalSection2_BeginSlow(PyThreadState *tstate, PyCriticalSection2 *c, PyMutex *m1, PyMutex *m2,
|
||||
int is_m1_locked)
|
||||
{
|
||||
#ifdef Py_GIL_DISABLED
|
||||
PyThreadState *tstate = _PyThreadState_GET();
|
||||
c->_cs_base._cs_mutex = NULL;
|
||||
c->_cs_mutex2 = NULL;
|
||||
c->_cs_base._cs_prev = tstate->critical_section;
|
||||
|
|
@ -139,7 +137,7 @@ void
|
|||
PyCriticalSection_Begin(PyCriticalSection *c, PyObject *op)
|
||||
{
|
||||
#ifdef Py_GIL_DISABLED
|
||||
_PyCriticalSection_Begin(c, op);
|
||||
_PyCriticalSection_Begin(_PyThreadState_GET(), c, op);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -148,7 +146,7 @@ void
|
|||
PyCriticalSection_BeginMutex(PyCriticalSection *c, PyMutex *m)
|
||||
{
|
||||
#ifdef Py_GIL_DISABLED
|
||||
_PyCriticalSection_BeginMutex(c, m);
|
||||
_PyCriticalSection_BeginMutex(_PyThreadState_GET(), c, m);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +155,7 @@ void
|
|||
PyCriticalSection_End(PyCriticalSection *c)
|
||||
{
|
||||
#ifdef Py_GIL_DISABLED
|
||||
_PyCriticalSection_End(c);
|
||||
_PyCriticalSection_End(_PyThreadState_GET(), c);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -166,7 +164,7 @@ void
|
|||
PyCriticalSection2_Begin(PyCriticalSection2 *c, PyObject *a, PyObject *b)
|
||||
{
|
||||
#ifdef Py_GIL_DISABLED
|
||||
_PyCriticalSection2_Begin(c, a, b);
|
||||
_PyCriticalSection2_Begin(_PyThreadState_GET(), c, a, b);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -175,7 +173,7 @@ void
|
|||
PyCriticalSection2_BeginMutex(PyCriticalSection2 *c, PyMutex *m1, PyMutex *m2)
|
||||
{
|
||||
#ifdef Py_GIL_DISABLED
|
||||
_PyCriticalSection2_BeginMutex(c, m1, m2);
|
||||
_PyCriticalSection2_BeginMutex(_PyThreadState_GET(), c, m1, m2);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -184,6 +182,6 @@ void
|
|||
PyCriticalSection2_End(PyCriticalSection2 *c)
|
||||
{
|
||||
#ifdef Py_GIL_DISABLED
|
||||
_PyCriticalSection2_End(c);
|
||||
_PyCriticalSection2_End(_PyThreadState_GET(), c);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue