STINNER Victor <vstin...@redhat.com> added the comment:
> ktrace shows that dup(0) succeeded but fstat(0) failed. Aha, the problem is still the is_valid_fd() function: /* Prefer dup() over fstat(). fstat() can require input/output whereas dup() doesn't, there is a low risk of EMFILE/ENFILE at Python startup. */ The function has been fixed on macOS with: #ifdef __APPLE__ /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect such error. */ struct stat st; return (fstat(fd, &st) == 0); #else I see two options: * Only use dup() on platforms when we know that dup() is enough to detect corner cases: Linux and Windows * Force usage of fstat() on FreeBSD... But what about OpenBSD, NetBSD and other BSD variants? I wrote attached PR 12852 to only use dup() on Linux and Windows. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue32849> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com