diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2023-10-02 15:37:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-02 15:37:40 (GMT) |
commit | b723b8a13d6b74b0fa1bf89149f314e26a93be9d (patch) | |
tree | 2134501782dd3a2ca3deb26e5efefd852306a744 /Modules/_threadmodule.c | |
parent | 84f9da9ab52e476224baac8786ab104e80ff77ba (diff) | |
download | cpython-b723b8a13d6b74b0fa1bf89149f314e26a93be9d.zip cpython-b723b8a13d6b74b0fa1bf89149f314e26a93be9d.tar.gz cpython-b723b8a13d6b74b0fa1bf89149f314e26a93be9d.tar.bz2 |
[3.12] gh-109593: Fix reentrancy issue in multiprocessing resource_tracker (GH-109629) (#109898)
gh-109593: Fix reentrancy issue in multiprocessing resource_tracker (GH-109629)
---------
(cherry picked from commit 0eb98837b60bc58e57ad3e2b35c6b0e9ab634678)
Co-authored-by: Antoine Pitrou <antoine@python.org>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Diffstat (limited to 'Modules/_threadmodule.c')
-rw-r--r-- | Modules/_threadmodule.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 4514dfd..18fd65a 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -486,6 +486,18 @@ PyDoc_STRVAR(rlock_release_save_doc, \n\ For internal use by `threading.Condition`."); +static PyObject * +rlock_recursion_count(rlockobject *self, PyObject *Py_UNUSED(ignored)) +{ + unsigned long tid = PyThread_get_thread_ident(); + return PyLong_FromUnsignedLong( + self->rlock_owner == tid ? self->rlock_count : 0UL); +} + +PyDoc_STRVAR(rlock_recursion_count_doc, +"_recursion_count() -> int\n\ +\n\ +For internal use by reentrancy checks."); static PyObject * rlock_is_owned(rlockobject *self, PyObject *Py_UNUSED(ignored)) @@ -561,6 +573,8 @@ static PyMethodDef rlock_methods[] = { METH_VARARGS, rlock_acquire_restore_doc}, {"_release_save", (PyCFunction)rlock_release_save, METH_NOARGS, rlock_release_save_doc}, + {"_recursion_count", (PyCFunction)rlock_recursion_count, + METH_NOARGS, rlock_recursion_count_doc}, {"__enter__", _PyCFunction_CAST(rlock_acquire), METH_VARARGS | METH_KEYWORDS, rlock_acquire_doc}, {"__exit__", (PyCFunction)rlock_release, |