Issue #17899: Fix rare file descriptor leak in os.listdir().
This commit is contained in:
parent
ffff763161
commit
4dbc95e258
|
@ -10,6 +10,8 @@ What's New in Python 3.4.0 Alpha 1?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #17899: Fix rare file descriptor leak in os.listdir().
|
||||
|
||||
- Issue #10241: Clear extension module dict copies at interpreter shutdown.
|
||||
Patch by Neil Schemenauer, minimally modified.
|
||||
|
||||
|
|
|
@ -3420,12 +3420,13 @@ exit:
|
|||
static PyObject *
|
||||
_posix_listdir(path_t *path, PyObject *list)
|
||||
{
|
||||
int fd = -1;
|
||||
|
||||
PyObject *v;
|
||||
DIR *dirp = NULL;
|
||||
struct dirent *ep;
|
||||
int return_str; /* if false, return bytes */
|
||||
#ifdef HAVE_FDOPENDIR
|
||||
int fd = -1;
|
||||
#endif
|
||||
|
||||
errno = 0;
|
||||
#ifdef HAVE_FDOPENDIR
|
||||
|
@ -3467,6 +3468,13 @@ _posix_listdir(path_t *path, PyObject *list)
|
|||
|
||||
if (dirp == NULL) {
|
||||
list = path_error(path);
|
||||
#ifdef HAVE_FDOPENDIR
|
||||
if (fd != -1) {
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
close(fd);
|
||||
Py_END_ALLOW_THREADS
|
||||
}
|
||||
#endif
|
||||
goto exit;
|
||||
}
|
||||
if ((list = PyList_New(0)) == NULL) {
|
||||
|
@ -3509,8 +3517,10 @@ _posix_listdir(path_t *path, PyObject *list)
|
|||
exit:
|
||||
if (dirp != NULL) {
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
#ifdef HAVE_FDOPENDIR
|
||||
if (fd > -1)
|
||||
rewinddir(dirp);
|
||||
#endif
|
||||
closedir(dirp);
|
||||
Py_END_ALLOW_THREADS
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue