mirror of
https://github.com/python/cpython.git
synced 2026-05-08 21:50:40 -04:00
Massive changes for separate thread state management.
All per-thread globals are moved into a struct which is manipulated separately.
This commit is contained in:
+42
-8
@@ -77,17 +77,11 @@ int Py_VerboseFlag; /* Needed by import.c */
|
||||
int Py_SuppressPrintingFlag; /* Needed by ceval.c */
|
||||
int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
|
||||
|
||||
/* Initialize all */
|
||||
/* Initialize the current interpreter; pass in the Python path. */
|
||||
|
||||
void
|
||||
Py_Initialize()
|
||||
Py_Setup()
|
||||
{
|
||||
static int inited;
|
||||
|
||||
if (inited)
|
||||
return;
|
||||
inited = 1;
|
||||
|
||||
PyImport_Init();
|
||||
|
||||
/* Modules '__builtin__' and 'sys' are initialized here,
|
||||
@@ -105,6 +99,46 @@ Py_Initialize()
|
||||
initmain();
|
||||
}
|
||||
|
||||
/* Create and interpreter and thread state and initialize them;
|
||||
if we already have an interpreter and thread, do nothing.
|
||||
Fatal error if the creation fails. */
|
||||
|
||||
void
|
||||
Py_Initialize()
|
||||
{
|
||||
PyThreadState *tstate;
|
||||
PyInterpreterState *interp;
|
||||
if (PyThreadState_Get())
|
||||
return;
|
||||
interp = PyInterpreterState_New();
|
||||
if (interp == NULL)
|
||||
Py_FatalError("PyInterpreterState_New() failed");
|
||||
tstate = PyThreadState_New(interp);
|
||||
if (tstate == NULL)
|
||||
Py_FatalError("PyThreadState_New() failed");
|
||||
(void) PyThreadState_Swap(tstate);
|
||||
|
||||
Py_Setup();
|
||||
|
||||
PySys_SetPath(Py_GetPath());
|
||||
}
|
||||
|
||||
/*
|
||||
Py_Initialize()
|
||||
-- do everything, no-op on second call, call fatal on failure, set path
|
||||
|
||||
#2
|
||||
-- create new interp+tstate & make it current, return NULL on failure,
|
||||
make it current, do all setup, set path
|
||||
|
||||
#3
|
||||
-- #2 without set path
|
||||
|
||||
#4
|
||||
-- is there any point to #3 for caller-provided current interp+tstate?
|
||||
|
||||
*/
|
||||
|
||||
/* Create __main__ module */
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user