bpo-43268: local_clear() uses _PyInterpreterState_GET() (GH-24583)

Cleanup also the code.
This commit is contained in:
Victor Stinner 2021-02-19 15:51:36 +01:00 committed by GitHub
parent bcb094b41f
commit 839184f85c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 15 deletions

View File

@ -828,27 +828,26 @@ local_traverse(localobject *self, visitproc visit, void *arg)
static int
local_clear(localobject *self)
{
PyThreadState *tstate;
Py_CLEAR(self->args);
Py_CLEAR(self->kw);
Py_CLEAR(self->dummies);
Py_CLEAR(self->wr_callback);
/* Remove all strong references to dummies from the thread states */
if (self->key
&& (tstate = PyThreadState_Get())
&& tstate->interp) {
for(tstate = PyInterpreterState_ThreadHead(tstate->interp);
tstate;
tstate = PyThreadState_Next(tstate))
if (tstate->dict) {
PyObject *v = _PyDict_Pop(tstate->dict, self->key, Py_None);
if (v == NULL) {
PyErr_Clear();
}
else {
Py_DECREF(v);
}
if (self->key) {
PyInterpreterState *interp = _PyInterpreterState_GET();
PyThreadState *tstate = PyInterpreterState_ThreadHead(interp);
for(; tstate; tstate = PyThreadState_Next(tstate)) {
if (tstate->dict == NULL) {
continue;
}
PyObject *v = _PyDict_Pop(tstate->dict, self->key, Py_None);
if (v != NULL) {
Py_DECREF(v);
}
else {
PyErr_Clear();
}
}
}
return 0;
}