-
-
Notifications
You must be signed in to change notification settings - Fork 33.5k
bpo-26228: pty.spawn hangs on FreeBSD, OS X, and Solaris #4167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Lib/pty.py
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing module again. In PR #2932 you fixed this line. See https://bugs.python.org/review/29070/diff/19699/Lib/pty.py#newcode170.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for catching this ... again 🎃 👻
Thank you so much for your feedback! 🥇
vadmium
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can’t see anything seriously wrong with 005dc23, although I think it would be better to test the API (pty.spawn), without depending on the internals (_copy, select, etc) if possible.
Lib/test/test_pty.py
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is the method called stdin_stdout, while the body only looks at STDIN_FILENO?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in the following commit: A docstring explains the name and the method also checks for STDOUT_FILENO.
Lib/test/test_pty.py
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suspect the raise statement never executes because TestCase.fail raises its own exception.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your suspicion is appropriate. Fixed in the following commit.
Lib/test/test_pty.py
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the point of this test? I don’t think it matters.
You seem to be modelling a situation where input (or EOF) to the child becomes available at about the same instant that the slave terminal is closed. If _copy were written differently, it might copy the input to the child (STDIN_FILENO) before checking the pseudoterminal master (master_fd), and the test would fail.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
True, this part of the test is overly fitted for an unnecessary implementation detail. Removed in the following commit
|
Yes, blackbox tests for the API (pty.spawn) would be nice. But at the moment, they could not be merged in isolation because they would fail on FreeBSD.
|
* Linux -> Unix * More details about the behavior of spawn
Thanks to vadmium for catching this error twice. https://bugs.python.org/review/29070/diff/19699/Lib/pty.py#newcode170
|
Closing in favor of GH-12049. |
Co-authored-by: Cornelius Diekmann <c.diekmann@googlemail.com>
|
The doc part of this was included in GH-27754. |
…ythonGH-27754) Co-authored-by: Cornelius Diekmann <c.diekmann@googlemail.com> (cherry picked from commit dd8eb30) Co-authored-by: Łukasz Langa <lukasz@langa.pl>
issue26228 as github PR.
This PR contains:
According to the bpo discussion, this fixes
pty.spawn()on FreeBSD, OS X, and Solaris.https://bugs.python.org/issue26228