]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-43895: Remove an unnecessary cache of shared object handles (GH-25487)
authorIan Henriksen <insertinterestingnamehere@gmail.com>
Wed, 7 Jul 2021 23:26:06 +0000 (18:26 -0500)
committerGitHub <noreply@github.com>
Wed, 7 Jul 2021 23:26:06 +0000 (16:26 -0700)
* Remove an unnecessary cache of shared object handles.

Misc/NEWS.d/next/Core and Builtins/2021-07-07-16-05-35.bpo-43895.JFjR0-.rst [new file with mode: 0644]
Python/dynload_shlib.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-07-07-16-05-35.bpo-43895.JFjR0-.rst b/Misc/NEWS.d/next/Core and Builtins/2021-07-07-16-05-35.bpo-43895.JFjR0-.rst
new file mode 100644 (file)
index 0000000..49deb48
--- /dev/null
@@ -0,0 +1,4 @@
+An obsolete internal cache of shared object file handles added in 1995 that
+attempted, but did not guarantee, that a .so would not be dlopen'ed twice to
+work around flaws in mid-1990s posix-ish operating systems has been removed
+from dynload_shlib.c.
index 23828898d35a5d50df3ca09b4a2283a0fa54a3ee..3c5fd83df584d529223f7ec410cf626793cd253e 100644 (file)
@@ -48,13 +48,6 @@ const char *_PyImport_DynLoadFiletab[] = {
     NULL,
 };
 
-static struct {
-    dev_t dev;
-    ino_t ino;
-    void *handle;
-} handles[128];
-static int nhandles = 0;
-
 
 dl_funcptr
 _PyImport_FindSharedFuncptr(const char *prefix,
@@ -77,22 +70,9 @@ _PyImport_FindSharedFuncptr(const char *prefix,
                   LEAD_UNDERSCORE "%.20s_%.200s", prefix, shortname);
 
     if (fp != NULL) {
-        int i;
         struct _Py_stat_struct status;
         if (_Py_fstat(fileno(fp), &status) == -1)
             return NULL;
-        for (i = 0; i < nhandles; i++) {
-            if (status.st_dev == handles[i].dev &&
-                status.st_ino == handles[i].ino) {
-                p = (dl_funcptr) dlsym(handles[i].handle,
-                                       funcname);
-                return p;
-            }
-        }
-        if (nhandles < 128) {
-            handles[nhandles].dev = status.st_dev;
-            handles[nhandles].ino = status.st_ino;
-        }
     }
 
     dlopenflags = _PyInterpreterState_GET()->dlopenflags;
@@ -126,8 +106,6 @@ _PyImport_FindSharedFuncptr(const char *prefix,
         Py_DECREF(path);
         return NULL;
     }
-    if (fp != NULL && nhandles < 128)
-        handles[nhandles++].handle = handle;
     p = (dl_funcptr) dlsym(handle, funcname);
     return p;
 }