summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2021-08-31-11-09-52.bpo-45012.ueeOcx.rst2
-rw-r--r--Modules/posixmodule.c10
3 files changed, 11 insertions, 2 deletions
diff --git a/Misc/ACKS b/Misc/ACKS
index 481e46d..23c92ab 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -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);