mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
bpo-45012: Release GIL around stat in os.scandir (GH-28085)
Releasing GIL allows other threads to continue its work when os.scandir is fetching DirEntry.stat info from file system.
This commit is contained in:
parent
750368cbcd
commit
9dc363ee7c
3 changed files with 11 additions and 2 deletions
|
|
@ -1645,6 +1645,7 @@ J. Sipprell
|
|||
Ngalim Siregar
|
||||
Kragen Sitaker
|
||||
Kaartic Sivaraam
|
||||
Stanisław Skonieczny
|
||||
Roman Skurikhin
|
||||
Ville Skyttä
|
||||
Michael Sloan
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue