Repository navigation
asyncio hang in subprocess wait_closed() on Windows, BrokenPipeError #89237
Description
Activity
I have a reproducible case where stdin.wait_closed() is hanging on
Windows. This happens in response to a BrokenPipeError. The same code
works fine on Linux and MacOS.Please see the attached code for the demo.
I believe the hang is related to this debug message from the logs:
DEBUG <_ProactorWritePipeTransport closing fd=632>: Fatal write error on pipe transport Traceback (most recent call last): File "C:\hostedtoolcache\windows\Python\3.9.6\x64\lib\asyncio\proactor_events.py", line 379, in _loop_writing f.result() File "C:\hostedtoolcache\windows\Python\3.9.6\x64\lib\asyncio\windows_events.py", line 812, in _poll value = callback(transferred, key, ov) File "C:\hostedtoolcache\windows\Python\3.9.6\x64\lib\asyncio\windows_events.py", line 538, in finish_send return ov.getresult() BrokenPipeError: [WinError 109] The pipe has been ended
It appears that the function that logs "Fatal write error on pipe transport" also
calls _abort on the stream. If _abort is called before stdin.close(), everything is okay.
If _abort is called after stdin.close(), stdin.wait_closed() will hang.Please see issue bpo-44428 for another instance of a similar hang in wait_closed().
- added3.9 (EOL)end of lifeend of life3.10 (EOL)end of lifeend of lifetype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Sep 1, 2021 This bug is another instance of
protocol.connection_lostcallback not getting called correctly. With #98572 the callback is always called which fixes the issue.With fix output:
Running Debug|x64 interpreter... BrokenPipe 1 - correct BrokenPipe 2 - correct- added3.11only security fixesonly security fixes3.12only security fixesonly security fixesand removed3.9 (EOL)end of lifeend of life
on Oct 23, 2022 - added a commit that references this issue
on Oct 24, 2022 - added 3 commits that reference this issue
on Oct 24, 2022 - added a commit that references this issue
on Oct 25, 2022
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: