Mercurial > cpython-lru_cache-weakref
diff Python/pythonrun.c @ 5405:b7871ca930ad legacy-trunk
Massive changes for separate thread state management.
All per-thread globals are moved into a struct which is manipulated
separately.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Mon, 05 May 1997 20:56:21 +0000 |
| parents | 07ed52e200db |
| children | 596380a567d2 |
line wrap: on
line diff
--- a/Python/pythonrun.c Mon May 05 20:53:25 1997 +0000 +++ b/Python/pythonrun.c Mon May 05 20:56:21 1997 +0000 @@ -77,17 +77,11 @@ 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 @@ 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
