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 00000000000000..49deb48fa43582 --- /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 23828898d35a5d..3c5fd83df584d5 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; }