diff Python/import.c @ 16712:6341f8d909ac legacy-trunk

The code in PyImport_Import() tried to save itself a bit of work and save the __builtin__ module in a static variable. But this doesn't work across Py_Finalise()/Py_Initialize()! It also doesn't work when using multiple interpreter states created with PyInterpreterState_New(). So I'm ripping out this small optimization. This was probably broken since PyImport_Import() was introduced in 1997! We really need a better test suite for multiple interpreter states and repeatedly initializing. This fixes the problems Barry reported in Demo/embed/loop.c.
author Guido van Rossum <guido@python.org>
date Tue, 20 Feb 2001 21:43:24 +0000
parents b59f3a1eb123
children 3b05212c1616
line wrap: on
line diff
--- a/Python/import.c	Tue Feb 20 20:54:28 2001 +0000
+++ b/Python/import.c	Tue Feb 20 21:43:24 2001 +0000
@@ -1154,7 +1154,8 @@
 		     name, buf);
 		return 0;
 	}
-	if ( namelen > fss.name[0] || strncmp(name, (char *)fss.name+1, namelen) != 0 ) {
+	if (namelen > fss.name[0] ||
+	    strncmp(name, (char *)fss.name+1, namelen) != 0) {
 		PyErr_Format(PyExc_NameError,
 		     "Case mismatch for module name %.100s\n(filename %.300s)",
 		     name, fss.name);
@@ -1873,7 +1874,6 @@
 	static PyObject *silly_list = NULL;
 	static PyObject *builtins_str = NULL;
 	static PyObject *import_str = NULL;
-	static PyObject *standard_builtins = NULL;
 	PyObject *globals = NULL;
 	PyObject *import = NULL;
 	PyObject *builtins = NULL;
@@ -1894,7 +1894,7 @@
 
 	/* Get the builtins from current globals */
 	globals = PyEval_GetGlobals();
-	if(globals != NULL) {
+	if (globals != NULL) {
 	        Py_INCREF(globals);
 		builtins = PyObject_GetItem(globals, builtins_str);
 		if (builtins == NULL)
@@ -1904,16 +1904,10 @@
 		/* No globals -- use standard builtins, and fake globals */
 		PyErr_Clear();
 
-		if (standard_builtins == NULL) {
-			standard_builtins =
-				PyImport_ImportModuleEx("__builtin__",
-							NULL, NULL, NULL);
-			if (standard_builtins == NULL)
-				return NULL;
-		}
-
-		builtins = standard_builtins;
-		Py_INCREF(builtins);
+		builtins = PyImport_ImportModuleEx("__builtin__",
+						   NULL, NULL, NULL);
+		if (builtins == NULL)
+			return NULL;
 		globals = Py_BuildValue("{OO}", builtins_str, builtins);
 		if (globals == NULL)
 			goto err;