bpo-45953: Preserve backward compatibility on some PyThreadState field names. (GH-31038)

The gevent project is using the two `PyThreadState` fields I renamed in gh-30590.  This PR fixes the names.  See #msg412046.
This commit is contained in:
Eric Snow 2022-02-01 10:02:25 -07:00 committed by GitHub
parent 64568acbd8
commit f78be59c83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 6 deletions

View File

@ -187,16 +187,19 @@ struct _ts {
/* The following fields are here to avoid allocation during init.
The data is exposed through PyThreadState pointer fields.
These fields should not be accessed directly outside of init.
This is indicated by an underscore prefix on the field names.
All other PyInterpreterState pointer fields are populated when
needed and default to NULL.
*/
// Note some fields do not have a leading underscore for backward
// compatibility. See https://bugs.python.org/issue45953#msg412046.
/* The thread's exception stack entry. (Always the last entry.) */
_PyErr_StackItem _exc_state;
_PyErr_StackItem exc_state;
/* The bottom-most frame on the stack. */
CFrame _root_cframe;
CFrame root_cframe;
};

View File

@ -776,9 +776,9 @@ init_threadstate(PyThreadState *tstate,
tstate->recursion_limit = interp->ceval.recursion_limit,
tstate->recursion_remaining = interp->ceval.recursion_limit,
tstate->exc_info = &tstate->_exc_state;
tstate->exc_info = &tstate->exc_state;
tstate->cframe = &tstate->_root_cframe;
tstate->cframe = &tstate->root_cframe;
tstate->datastack_chunk = NULL;
tstate->datastack_top = NULL;
tstate->datastack_limit = NULL;
@ -1016,10 +1016,10 @@ PyThreadState_Clear(PyThreadState *tstate)
Py_CLEAR(tstate->curexc_value);
Py_CLEAR(tstate->curexc_traceback);
Py_CLEAR(tstate->_exc_state.exc_value);
Py_CLEAR(tstate->exc_state.exc_value);
/* The stack of exception states should contain just this thread. */
if (verbose && tstate->exc_info != &tstate->_exc_state) {
if (verbose && tstate->exc_info != &tstate->exc_state) {
fprintf(stderr,
"PyThreadState_Clear: warning: thread still has a generator\n");
}