From: Ian Henriksen Date: Wed, 7 Jul 2021 23:26:06 +0000 (-0500) Subject: bpo-43895: Remove an unnecessary cache of shared object handles (GH-25487) X-Git-Tag: v3.11.0a1~715 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fed2fc4443235fa9669b73817827fd6da88e3417;p=thirdparty%2FPython%2Fcpython.git bpo-43895: Remove an unnecessary cache of shared object handles (GH-25487) * Remove an unnecessary cache of shared object handles. --- 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 index 000000000000..49deb48fa435 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-07-07-16-05-35.bpo-43895.JFjR0-.rst @@ -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. diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c index 23828898d35a..3c5fd83df584 100644 --- a/Python/dynload_shlib.c +++ b/Python/dynload_shlib.c @@ -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; }