Commit e7c74923 authored by Victor Stinner's avatar Victor Stinner

Issue #23851: close() must not be retried when it fails with EINTR

See the PEP 475 for the rationale.
parent d223fa63
...@@ -207,13 +207,13 @@ _close_fds_by_brute_force(long start_fd, PyObject *py_fds_to_keep) ...@@ -207,13 +207,13 @@ _close_fds_by_brute_force(long start_fd, PyObject *py_fds_to_keep)
if (keep_fd < start_fd) if (keep_fd < start_fd)
continue; continue;
for (fd_num = start_fd; fd_num < keep_fd; ++fd_num) { for (fd_num = start_fd; fd_num < keep_fd; ++fd_num) {
while (close(fd_num) < 0 && errno == EINTR); close(fd_num);
} }
start_fd = keep_fd + 1; start_fd = keep_fd + 1;
} }
if (start_fd <= end_fd) { if (start_fd <= end_fd) {
for (fd_num = start_fd; fd_num < end_fd; ++fd_num) { for (fd_num = start_fd; fd_num < end_fd; ++fd_num) {
while (close(fd_num) < 0 && errno == EINTR); close(fd_num);
} }
} }
} }
...@@ -274,11 +274,11 @@ _close_open_fds_safe(int start_fd, PyObject* py_fds_to_keep) ...@@ -274,11 +274,11 @@ _close_open_fds_safe(int start_fd, PyObject* py_fds_to_keep)
continue; /* Not a number. */ continue; /* Not a number. */
if (fd != fd_dir_fd && fd >= start_fd && if (fd != fd_dir_fd && fd >= start_fd &&
!_is_fd_in_sorted_fd_sequence(fd, py_fds_to_keep)) { !_is_fd_in_sorted_fd_sequence(fd, py_fds_to_keep)) {
while (close(fd) < 0 && errno == EINTR); close(fd);
} }
} }
} }
while (close(fd_dir_fd) < 0 && errno == EINTR); close(fd_dir_fd);
} }
} }
...@@ -312,7 +312,7 @@ _close_open_fds_maybe_unsafe(long start_fd, PyObject* py_fds_to_keep) ...@@ -312,7 +312,7 @@ _close_open_fds_maybe_unsafe(long start_fd, PyObject* py_fds_to_keep)
* reuse that fd otherwise we might close opendir's file descriptor in * reuse that fd otherwise we might close opendir's file descriptor in
* our loop. This trick assumes that fd's are allocated on a lowest * our loop. This trick assumes that fd's are allocated on a lowest
* available basis. */ * available basis. */
while (close(start_fd) < 0 && errno == EINTR); close(start_fd);
++start_fd; ++start_fd;
#endif #endif
...@@ -339,7 +339,7 @@ _close_open_fds_maybe_unsafe(long start_fd, PyObject* py_fds_to_keep) ...@@ -339,7 +339,7 @@ _close_open_fds_maybe_unsafe(long start_fd, PyObject* py_fds_to_keep)
continue; /* Not a number. */ continue; /* Not a number. */
if (fd != fd_used_by_opendir && fd >= start_fd && if (fd != fd_used_by_opendir && fd >= start_fd &&
!_is_fd_in_sorted_fd_sequence(fd, py_fds_to_keep)) { !_is_fd_in_sorted_fd_sequence(fd, py_fds_to_keep)) {
while (close(fd) < 0 && errno == EINTR); close(fd);
} }
errno = 0; errno = 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment