From a027efa5bfa7911b5c4b522b6a0698749a6f2e4a Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 5 May 1997 20:56:21 +0000 Subject: Massive changes for separate thread state management. All per-thread globals are moved into a struct which is manipulated separately. --- Python/pythonrun.c | 50 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 8 deletions(-) (limited to 'Python/pythonrun.c') diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 4d6b918bff..f08a2c4a6e 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -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 -- cgit v1.2.1