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.

Author byllyfish
Recipients asvetlov, byllyfish, yselivanov
Date 2021-09-01.05:10:33
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1630473033.57.0.597404080995.issue45074@roundup.psfhosted.org>
In-reply-to
Content
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 #44428 for another instance of a similar hang in wait_closed().
History
Date User Action Args
2021-09-01 05:10:33byllyfishsetrecipients: + byllyfish, asvetlov, yselivanov
2021-09-01 05:10:33byllyfishsetmessageid: <1630473033.57.0.597404080995.issue45074@roundup.psfhosted.org>
2021-09-01 05:10:33byllyfishlinkissue45074 messages
2021-09-01 05:10:33byllyfishcreate