mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
gh-81057: Move More Globals in Core Code to _PyRuntimeState (gh-99516)
https://github.com/python/cpython/issues/81057
This commit is contained in:
parent
5cfb7d19f5
commit
5f55067e23
24 changed files with 241 additions and 130 deletions
|
|
@ -1723,12 +1723,14 @@ float___getnewargs___impl(PyObject *self)
|
|||
}
|
||||
|
||||
/* this is for the benefit of the pack/unpack routines below */
|
||||
typedef enum _py_float_format_type float_format_type;
|
||||
#define unknown_format _py_float_format_unknown
|
||||
#define ieee_big_endian_format _py_float_format_ieee_big_endian
|
||||
#define ieee_little_endian_format _py_float_format_ieee_little_endian
|
||||
|
||||
typedef enum {
|
||||
unknown_format, ieee_big_endian_format, ieee_little_endian_format
|
||||
} float_format_type;
|
||||
#define float_format (_PyRuntime.float_state.float_format)
|
||||
#define double_format (_PyRuntime.float_state.double_format)
|
||||
|
||||
static float_format_type double_format, float_format;
|
||||
|
||||
/*[clinic input]
|
||||
@classmethod
|
||||
|
|
@ -1929,13 +1931,9 @@ PyTypeObject PyFloat_Type = {
|
|||
.tp_vectorcall = (vectorcallfunc)float_vectorcall,
|
||||
};
|
||||
|
||||
void
|
||||
_PyFloat_InitState(PyInterpreterState *interp)
|
||||
static void
|
||||
_init_global_state(void)
|
||||
{
|
||||
if (!_Py_IsMainInterpreter(interp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
float_format_type detected_double_format, detected_float_format;
|
||||
|
||||
/* We attempt to determine if this machine is using IEEE
|
||||
|
|
@ -1985,6 +1983,15 @@ _PyFloat_InitState(PyInterpreterState *interp)
|
|||
float_format = detected_float_format;
|
||||
}
|
||||
|
||||
void
|
||||
_PyFloat_InitState(PyInterpreterState *interp)
|
||||
{
|
||||
if (!_Py_IsMainInterpreter(interp)) {
|
||||
return;
|
||||
}
|
||||
_init_global_state();
|
||||
}
|
||||
|
||||
PyStatus
|
||||
_PyFloat_InitTypes(PyInterpreterState *interp)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -218,6 +218,7 @@ _PyModule_CreateInitialized(PyModuleDef* module, int module_api_version)
|
|||
_Py_PackageContext, and PyModule_Create*() will substitute this
|
||||
(if the name actually matches).
|
||||
*/
|
||||
#define _Py_PackageContext (_PyRuntime.imports.pkgcontext)
|
||||
if (_Py_PackageContext != NULL) {
|
||||
const char *p = strrchr(_Py_PackageContext, '.');
|
||||
if (p != NULL && strcmp(module->m_name, p+1) == 0) {
|
||||
|
|
@ -225,6 +226,7 @@ _PyModule_CreateInitialized(PyModuleDef* module, int module_api_version)
|
|||
_Py_PackageContext = NULL;
|
||||
}
|
||||
}
|
||||
#undef _Py_PackageContext
|
||||
if ((m = (PyModuleObject*)PyModule_New(name)) == NULL)
|
||||
return NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -1856,7 +1856,7 @@ _PyUnicode_FromId(_Py_Identifier *id)
|
|||
|
||||
Py_ssize_t index = _Py_atomic_size_get(&id->index);
|
||||
if (index < 0) {
|
||||
struct _Py_unicode_runtime_ids *rt_ids = &interp->runtime->unicode_ids;
|
||||
struct _Py_unicode_runtime_ids *rt_ids = &interp->runtime->unicode_state.ids;
|
||||
|
||||
PyThread_acquire_lock(rt_ids->lock, WAIT_LOCK);
|
||||
// Check again to detect concurrent access. Another thread can have
|
||||
|
|
@ -14491,12 +14491,14 @@ PyTypeObject PyUnicode_Type = {
|
|||
|
||||
/* Initialize the Unicode implementation */
|
||||
|
||||
void
|
||||
_PyUnicode_InitState(PyInterpreterState *interp)
|
||||
static void
|
||||
_init_global_state(void)
|
||||
{
|
||||
if (!_Py_IsMainInterpreter(interp)) {
|
||||
static int initialized = 0;
|
||||
if (initialized) {
|
||||
return;
|
||||
}
|
||||
initialized = 1;
|
||||
|
||||
/* initialize the linebreak bloom filter */
|
||||
const Py_UCS2 linebreak[] = {
|
||||
|
|
@ -14514,6 +14516,15 @@ _PyUnicode_InitState(PyInterpreterState *interp)
|
|||
Py_ARRAY_LENGTH(linebreak));
|
||||
}
|
||||
|
||||
void
|
||||
_PyUnicode_InitState(PyInterpreterState *interp)
|
||||
{
|
||||
if (!_Py_IsMainInterpreter(interp)) {
|
||||
return;
|
||||
}
|
||||
_init_global_state();
|
||||
}
|
||||
|
||||
|
||||
PyStatus
|
||||
_PyUnicode_InitGlobalObjects(PyInterpreterState *interp)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue