This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2018年04月29日 10:16 by MartinHusemann, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| patch-Python_pylifecycle.c | leot, 2018年05月19日 14:45 | Use fstat(2) instead of dup(2) on NetBSD too. The behaviour are the same of the one niced in bpo-30225 | ||
| is_valid_fd.c | leot, 2018年05月19日 14:46 | is_valid_fd() from Python 3.6.5 (Python/pylifecycle.c) | ||
| Messages (9) | |||
|---|---|---|---|
| msg315886 - (view) | Author: Martin Husemann (MartinHusemann) | Date: 2018年04月29日 10:16 | |
When building python extensions in the background w/o stdin (and stderr and stdout redirected to a log file), the invocation of setup.py fails. Normal build in a shell: Example from pyexpat: > /usr/pkg/bin/python3.6 setup.py build running build running build_ext building 'pyexpat' extension creating build creating build/temp.netbsd-8.99.14-amd64-3.6 creating build/temp.netbsd-8.99.14-amd64-3.6/Modules gcc -DNDEBUG -O2 -pipe -D_FORTIFY_SOURCE=2 -I/usr/include -I/usr/pkg/include -O2 -pipe -D_FORTIFY_SOURCE=2 -I/usr/include -I/usr/pkg/include/python3.6 -I/usr/include -I/usr/pkg/include/python3.6 -fPIC -DHAVE_EXPAT_H -I/work/pkgobj/textproc/py-expat/work/.buildlink/include -I/usr/pkg/include/python3.6 -c Modules/pyexpat.c -o build/temp.netbsd-8.99.14-amd64-3.6/Modules/pyexpat.o creating build/lib.netbsd-8.99.14-amd64-3.6 gcc -pthread -shared -L. -L/usr/lib -Wl,-R/usr/lib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib -L/usr/X11R7/lib -Wl,-R/usr/X11R7/lib -L/usr/lib -Wl,-R/usr/lib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib -L/usr/X11R7/lib -Wl,-R/usr/X11R7/lib -L/usr/lib -Wl,-R/usr/lib -Wl,-R/usr/pkg/lib -O2 -pipe -D_FORTIFY_SOURCE=2 -I/usr/include -I/usr/pkg/include/python3.6 -I/usr/include -I/usr/pkg/include/python3.6 build/temp.netbsd-8.99.14-amd64-3.6/Modules/pyexpat.o -L/work/pkgobj/textproc/py-expat/work/.buildlink/lib -L/usr/pkg/lib -Wl,-R/work/pkgobj/textproc/py-expat/work/.buildlink/lib -lexpat -lpython3.6 -o build/lib.netbsd-8.99.14-amd64-3.6/pyexpat.so But if invoked as > ( sleep 15; /usr/pkg/bin/python3.6 setup.py build ) >/tmp/log 2>&1 & > ^D and then watching /tmp/log from another session: Fatal Python error: Py_Initialize: can't initialize sys standard streams OSError: [Errno 9] Bad file descriptor Current thread 0x000075b4e4cee800 (most recent call first): [1] Abort trap (core dumped) /usr/pkg/bin/pyt... |
|||
| msg316183 - (view) | Author: Xavier de Gaye (xdegaye) * (Python triager) | Date: 2018年05月04日 18:24 | |
I cannot reproduce the problem with Python 3.6.5, building pyephem and with the command: ( sleep 15; python setup.py build ) >foo.log 2>&1 |
|||
| msg317110 - (view) | Author: Martin Husemann (MartinHusemann) | Date: 2018年05月19日 10:36 | |
You need to exit the parent shell, to get the original stdin revoke(2)'d. That is: the Ctrl-D in the original descritpion is not line noise. Sorry, should have been more explicit (or used "exit" or something instead) |
|||
| msg317114 - (view) | Author: Leonardo Taccari (leot) | Date: 2018年05月19日 11:19 | |
A simpler way to reproduce that (probably this problem is not limited to building but to sys module): (sleep 10; python3.6 -c 'import sys' >/tmp/log 2>&1) & exit And in `/tmp/log': Fatal Python error: Py_Initialize: can't initialize sys standard streams OSError: [Errno 9] Bad file descriptor Current thread 0x00007226e0ab3800 (most recent call first): |
|||
| msg317117 - (view) | Author: Leonardo Taccari (leot) | Date: 2018年05月19日 13:31 | |
And here the backtrace of the corresponding core (this is on NetBSD/amd64 8.99.15 with lang/python36 package of today pkgsrc-current): % gdb -core python3.6.core `which python3.6` Reading symbols from /usr/pkg/bin/python3.6...done. [New process 1] Core was generated by `python3.6'. Program terminated with signal SIGABRT, Aborted. #0 0x000076255932924a in _lwp_kill () from /usr/lib/libc.so.12 (gdb) bt #0 0x000076255932924a in _lwp_kill () from /usr/lib/libc.so.12 #1 0x0000762559328e65 in abort () at /usr/src/lib/libc/stdlib/abort.c:74 #2 0x000076255a749d33 in Py_FatalError (msg=msg@entry=0x76255a7dea20 "Py_Initialize: can't initialize sys standard streams") at Python/pylifecycle.c:1462 #3 0x000076255a74af4c in _Py_InitializeEx_Private (install_sigs=1, install_importlib=1) at Python/pylifecycle.c:450 #4 0x000076255a764902 in Py_Main (argc=argc@entry=3, argv=argv@entry=0x76255ab01060) at Modules/main.c:700 #5 0x0000000000400e2f in main (argc=3, argv=<optimized out>) at ./Programs/python.c:69 (gdb) f 4 #4 0x000076255a764902 in Py_Main (argc=argc@entry=3, argv=argv@entry=0x76255ab01060) at Modules/main.c:700 700 Py_Initialize(); (gdb) f 3 #3 0x000076255a74af4c in _Py_InitializeEx_Private (install_sigs=1, install_importlib=1) at Python/pylifecycle.c:450 450 Py_FatalError( (gdb) list 445 if (_PyTraceMalloc_Init() < 0) 446 Py_FatalError("Py_Initialize: can't initialize tracemalloc"); 447 448 initmain(interp); /* Module __main__ */ 449 if (initstdio() < 0) 450 Py_FatalError( 451 "Py_Initialize: can't initialize sys standard streams"); 452 453 /* Initialize warnings. */ 454 if (PySys_HasWarnOptions()) { Please let me know if any further information is needed and I will try to help! Thank you! |
|||
| msg317121 - (view) | Author: Leonardo Taccari (leot) | Date: 2018年05月19日 14:45 | |
After testing is_valid_fd() (from Python/pylifecycle.c) separately (an `is_valid_fd.c' file will be attached to ease reproduction) I think that also NetBSD is affected by bpo-30225. Using dup(2) (at is currently done in NetBSD): % cc -o ivf is_valid_fd.c % sleep 5 && ./ivf > /tmp/log & exit [... the terminal is closed via ^D ...] % cat /tmp/log 0: 1 1: 1 2: 1 Using fstat(2): % cc -DUSE_FSTAT -o ivf is_valid_fd.c % sleep 5 && ./ivf > /tmp/log & exit [... the terminal is closed via ^D ...] % cat /tmp/log 0: 0 1: 1 2: 0 The possible attached patch seems to fix the problem reported by Martin. |
|||
| msg355179 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2019年10月22日 23:30 | |
I'm quite that this issue has been fixed by bpo-30225 which is part Python 3.7.4, Python 3.8.0 and newer. I mark the issue as duplicate of bpo-30225. Please reopen the bug if these versions still fail on NetBSD. commit 1c4670ea0cc3d208121af11b9b973e6bb268e570 Author: Victor Stinner <victor.stinner@gmail.com> Date: Thu May 4 00:45:56 2017 +0200 bpo-30225: Fix is_valid_fd() on macOS Tiger (#1443) is_valid_fd() now uses fstat() instead of dup() on macOS to return 0 on a pipe when the other side of the pipe is closed. fstat() fails with EBADF in that case, whereas dup() succeed. |
|||
| msg355321 - (view) | Author: Leonardo Taccari (leot) | Date: 2019年10月24日 10:38 | |
Hello Victor, I can confirm that I can no longer reproduce this problem with Python 3.7.5 on NetBSD and according a double-check to Python/pylifecycle.c:is_valid_fd() now fstat() is always used on NetBSD. Thanks for the update and for looking at it! |
|||
| msg355323 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2019年10月24日 10:39 | |
> I can confirm that I can no longer reproduce this problem with Python 3.7.5 on NetBSD Great! |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:59 | admin | set | github: 77565 |
| 2019年10月24日 10:39:12 | vstinner | set | messages: + msg355323 |
| 2019年10月24日 10:38:04 | leot | set | messages: + msg355321 |
| 2019年10月22日 23:30:02 | vstinner | set | status: open -> closed superseder: EBADF error on x86 Tiger 3.x buildbot title: Build does not work with closed stdin -> Build does not work with closed stdin on NetBSD nosy: + vstinner messages: + msg355179 resolution: duplicate stage: resolved |
| 2018年05月19日 14:46:48 | leot | set | files: + is_valid_fd.c |
| 2018年05月19日 14:45:48 | leot | set | files:
+ patch-Python_pylifecycle.c messages: + msg317121 |
| 2018年05月19日 13:31:32 | leot | set | messages: + msg317117 |
| 2018年05月19日 11:19:27 | leot | set | nosy:
+ leot messages: + msg317114 |
| 2018年05月19日 10:36:40 | MartinHusemann | set | messages: + msg317110 |
| 2018年05月04日 18:24:52 | xdegaye | set | nosy:
+ xdegaye messages: + msg316183 |
| 2018年04月29日 10:51:01 | wiz | set | nosy:
+ wiz |
| 2018年04月29日 10:16:35 | MartinHusemann | create | |