diff options
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2021-08-31-11-09-52.bpo-45012.ueeOcx.rst | 2 | ||||
-rw-r--r-- | Modules/posixmodule.c | 10 |
3 files changed, 11 insertions, 2 deletions
@@ -1645,6 +1645,7 @@ J. Sipprell Ngalim Siregar Kragen Sitaker Kaartic Sivaraam +Stanisław Skonieczny Roman Skurikhin Ville Skyttä Michael Sloan diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-08-31-11-09-52.bpo-45012.ueeOcx.rst b/Misc/NEWS.d/next/Core and Builtins/2021-08-31-11-09-52.bpo-45012.ueeOcx.rst new file mode 100644 index 0000000..91cb3a9 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-08-31-11-09-52.bpo-45012.ueeOcx.rst @@ -0,0 +1,2 @@ +In :mod:`posix`, release GIL during ``stat()``, ``lstat()``, and +``fstatat()`` syscalls made by :func:`os.DirEntry.stat`. Patch by Stanisław Skonieczny. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 73e7e60..89659ae 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -13489,8 +13489,10 @@ _Py_COMP_DIAG_POP if (self->dir_fd != DEFAULT_DIR_FD) { #ifdef HAVE_FSTATAT if (HAVE_FSTATAT_RUNTIME) { + Py_BEGIN_ALLOW_THREADS result = fstatat(self->dir_fd, path, &st, follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW); + Py_END_ALLOW_THREADS } else #endif /* HAVE_FSTATAT */ @@ -13503,10 +13505,14 @@ _Py_COMP_DIAG_POP else #endif { - if (follow_symlinks) + Py_BEGIN_ALLOW_THREADS + if (follow_symlinks) { result = STAT(path, &st); - else + } + else { result = LSTAT(path, &st); + } + Py_END_ALLOW_THREADS } #if defined(MS_WINDOWS) && !USE_UNICODE_WCHAR_CACHE PyMem_Free(path); |