STINNER Victor <[email protected]> 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 <[email protected]>
<https://bugs.python.org/issue32849>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com