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