]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
The code in PyImport_Import() tried to save itself a bit of work and
authorGuido van Rossum <guido@python.org>
Tue, 20 Feb 2001 21:43:24 +0000 (21:43 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 20 Feb 2001 21:43:24 +0000 (21:43 +0000)
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.

Python/import.c

index 71af3bd3f2172c9966e92854cdba161582346e24..b0069e4d7a5aa1ffb11ff158c9e9462b1c016e28 100644 (file)
@@ -1154,7 +1154,8 @@ check_case(char *buf, int len, int namelen, char *name)
                     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 @@ PyImport_Import(PyObject *module_name)
        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 @@ PyImport_Import(PyObject *module_name)
 
        /* 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 @@ PyImport_Import(PyObject *module_name)
                /* 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;