summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-04-28 11:40:44 (GMT)
committerGitHub <noreply@github.com>2021-04-28 11:40:44 (GMT)
commit32c5a174445ec93747240cd8472012276ed27acf (patch)
tree4543061a1faff9636786507ef6edc69bc1a66692 /Python
parent21b02b5f4018474620676be04310f7d230a464ea (diff)
downloadcpython-32c5a174445ec93747240cd8472012276ed27acf.zip
cpython-32c5a174445ec93747240cd8472012276ed27acf.tar.gz
cpython-32c5a174445ec93747240cd8472012276ed27acf.tar.bz2
bpo-43962: Fix _PyInterpreterState_IDIncref() (GH-25683)
_PyInterpreterState_IDIncref() now calls _PyInterpreterState_IDInitref() and always increments id_refcount.
Diffstat (limited to 'Python')
-rw-r--r--Python/pystate.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/Python/pystate.c b/Python/pystate.c
index 436f874..81bcf68 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -538,24 +538,25 @@ _PyInterpreterState_IDInitref(PyInterpreterState *interp)
}
-void
+int
_PyInterpreterState_IDIncref(PyInterpreterState *interp)
{
- if (interp->id_mutex == NULL) {
- return;
+ if (_PyInterpreterState_IDInitref(interp) < 0) {
+ return -1;
}
+
PyThread_acquire_lock(interp->id_mutex, WAIT_LOCK);
interp->id_refcount += 1;
PyThread_release_lock(interp->id_mutex);
+ return 0;
}
void
_PyInterpreterState_IDDecref(PyInterpreterState *interp)
{
- if (interp->id_mutex == NULL) {
- return;
- }
+ assert(interp->id_mutex != NULL);
+
struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
PyThread_acquire_lock(interp->id_mutex, WAIT_LOCK);
assert(interp->id_refcount != 0);