Merge branch 'main' into slots-after-items

This commit is contained in:
Serhiy Storchaka 2025-11-21 18:13:28 +02:00
commit cfa6fe9d48
54 changed files with 5897 additions and 172 deletions

View file

@ -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
}