diff options
author | Victor Stinner <vstinner@python.org> | 2021-04-28 11:40:44 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-28 11:40:44 (GMT) |
commit | 32c5a174445ec93747240cd8472012276ed27acf (patch) | |
tree | 4543061a1faff9636786507ef6edc69bc1a66692 /Python | |
parent | 21b02b5f4018474620676be04310f7d230a464ea (diff) | |
download | cpython-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.c | 13 |
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); |