diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2310,11 +2310,16 @@ } if (!PyArg_ParseTuple(args, "et:listdir", Py_FileSystemDefaultEncoding, &name)) return NULL; - if ((dirp = opendir(name)) == NULL) { + Py_BEGIN_ALLOW_THREADS + dirp = opendir(name); + Py_END_ALLOW_THREADS + if (dirp == NULL) { return posix_error_with_allocated_filename(name); } if ((d = PyList_New(0)) == NULL) { + Py_BEGIN_ALLOW_THREADS closedir(dirp); + Py_END_ALLOW_THREADS PyMem_Free(name); return NULL; } @@ -2327,7 +2332,9 @@ if (errno == 0) { break; } else { + Py_BEGIN_ALLOW_THREADS closedir(dirp); + Py_END_ALLOW_THREADS Py_DECREF(d); return posix_error_with_allocated_filename(name); } @@ -2368,7 +2375,9 @@ } Py_DECREF(v); } + Py_BEGIN_ALLOW_THREADS closedir(dirp); + Py_END_ALLOW_THREADS PyMem_Free(name); return d;