mirror of
https://github.com/python/cpython.git
synced 2025-10-28 09:10:36 +00:00
gh-112538: Add internal-only _PyThreadStateImpl "wrapper" for PyThreadState (gh-112560)
Every PyThreadState instance is now actually a _PyThreadStateImpl. It is safe to cast from `PyThreadState*` to `_PyThreadStateImpl*` and back. The _PyThreadStateImpl will contain fields that we do not want to expose in the public C API.
This commit is contained in:
parent
bf0beae6a0
commit
db460735af
7 changed files with 54 additions and 17 deletions
|
|
@ -29,6 +29,7 @@ extern "C" {
|
|||
#include "pycore_list.h" // struct _Py_list_state
|
||||
#include "pycore_object_state.h" // struct _py_object_state
|
||||
#include "pycore_obmalloc.h" // struct _obmalloc_state
|
||||
#include "pycore_tstate.h" // _PyThreadStateImpl
|
||||
#include "pycore_tuple.h" // struct _Py_tuple_state
|
||||
#include "pycore_typeobject.h" // struct types_state
|
||||
#include "pycore_unicodeobject.h" // struct _Py_unicode_state
|
||||
|
|
@ -210,8 +211,8 @@ struct _is {
|
|||
struct _Py_interp_cached_objects cached_objects;
|
||||
struct _Py_interp_static_objects static_objects;
|
||||
|
||||
/* the initial PyInterpreterState.threads.head */
|
||||
PyThreadState _initial_thread;
|
||||
/* the initial PyInterpreterState.threads.head */
|
||||
_PyThreadStateImpl _initial_thread;
|
||||
Py_ssize_t _interactive_src_count;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -186,7 +186,12 @@ extern PyTypeObject _PyExc_MemoryError;
|
|||
}, \
|
||||
}, \
|
||||
}, \
|
||||
._initial_thread = _PyThreadState_INIT, \
|
||||
._initial_thread = _PyThreadStateImpl_INIT, \
|
||||
}
|
||||
|
||||
#define _PyThreadStateImpl_INIT \
|
||||
{ \
|
||||
.base = _PyThreadState_INIT, \
|
||||
}
|
||||
|
||||
#define _PyThreadState_INIT \
|
||||
|
|
|
|||
26
Include/internal/pycore_tstate.h
Normal file
26
Include/internal/pycore_tstate.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef Py_INTERNAL_TSTATE_H
|
||||
#define Py_INTERNAL_TSTATE_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_BUILD_CORE
|
||||
# error "this header requires Py_BUILD_CORE define"
|
||||
#endif
|
||||
|
||||
|
||||
// Every PyThreadState is actually allocated as a _PyThreadStateImpl. The
|
||||
// PyThreadState fields are exposed as part of the C API, although most fields
|
||||
// are intended to be private. The _PyThreadStateImpl fields not exposed.
|
||||
typedef struct _PyThreadStateImpl {
|
||||
// semi-public fields are in PyThreadState.
|
||||
PyThreadState base;
|
||||
|
||||
// TODO: add private fields here
|
||||
} _PyThreadStateImpl;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !Py_INTERNAL_TSTATE_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue