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.

classification
Title: asyncio hang in subprocess wait_closed() on Windows, BrokenPipeError
Type: behavior Stage:
Components: asyncio Versions: Python 3.10, Python 3.9
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: asvetlov, byllyfish, yselivanov
Priority: normal Keywords:

Created on 2021-09-01 05:10 by byllyfish, last changed 2022-04-11 14:59 by admin.

Files
File name Uploaded Description Edit
wait_closed.py byllyfish, 2021-09-01 05:10 demonstrate hang in stream.wait_closed()
Messages (1)
msg400810 - (view) Author: William Fisher (byllyfish) Date: 2021-09-01 05:10
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
2022-04-11 14:59:49adminsetgithub: 89237
2021-09-01 05:10:33byllyfishcreate