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:
Guido van Rossum 1997-05-05 20:56:21 +00:00
parent 73237c54b4
commit a027efa5bf
15 changed files with 865 additions and 262 deletions

View file

@ -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