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
asyncio: bug in _ProactorBasePipeTransport._force_close() #79863
Comments
Running ProactorEventLoopTests.test_sendfile_close_peer_in_the_middle_of_receiving() logs a bug in _force_close(): see logs below. Extract of _force_close(): def _force_close(self, exc):
if self._empty_waiter is not None:
if exc is None:
self._empty_waiter.set_result(None)
else:
self._empty_waiter.set_exception(exc)
... Problem: _empty_waiter can be already done. For example, it can be created directly as done: def _make_empty_waiter(self):
...
self._empty_waiter = self._loop.create_future()
if self._write_fut is None:
self._empty_waiter.set_result(None)
return self._empty_waiter Attached PR fixes _force_close(): do nothing if _empty_waiter is already done. The regression comes from the following change: commit a19fb3c
Logs: vstinner@WIN C:\vstinner\python\master>python -X dev -m test test_asyncio -m test.test_asyncio.test_sendfile.ProactorEventLoopTests.test_sendfile_close_peer_in_the_middle_of_receiving
Running Debug|x64 interpreter...
Run tests sequentially
0:00:00 [1/1] test_asyncio
Exception in callback _ProactorReadPipeTransport._loop_reading(<_OverlappedF...events.py:452>)
handle: <Handle _ProactorReadPipeTransport._loop_reading(<_OverlappedF...events.py:452>) created at C:\vstinner\python\master\lib\asyncio\windows_events.py:82>
source_traceback: Object created at (most recent call last):
File "C:\vstinner\python\master\lib\test\test_asyncio\test_sendfile.py", line 125, in run_loop
return self.loop.run_until_complete(coro)
File "C:\vstinner\python\master\lib\asyncio\base_events.py", line 576, in run_until_complete
self.run_forever()
File "C:\vstinner\python\master\lib\asyncio\windows_events.py", line 315, in run_forever
super().run_forever()
File "C:\vstinner\python\master\lib\asyncio\base_events.py", line 544, in run_forever
self._run_once()
File "C:\vstinner\python\master\lib\asyncio\base_events.py", line 1729, in _run_once
event_list = self._selector.select(timeout)
File "C:\vstinner\python\master\lib\asyncio\windows_events.py", line 421, in select
self._poll(timeout)
File "C:\vstinner\python\master\lib\asyncio\windows_events.py", line 750, in _poll
f.set_exception(e)
File "C:\vstinner\python\master\lib\asyncio\windows_events.py", line 82, in set_exception
super().set_exception(exception)
Traceback (most recent call last):
File "C:\vstinner\python\master\lib\asyncio\windows_events.py", line 444, in finish_recv
return ov.getresult()
OSError: [WinError 64] The specified network name is no longer available
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\vstinner\python\master\lib\asyncio\proactor_events.py", line 256, in _loop_reading
data = fut.result()
File "C:\vstinner\python\master\lib\asyncio\windows_events.py", line 748, in _poll
value = callback(transferred, key, ov)
File "C:\vstinner\python\master\lib\asyncio\windows_events.py", line 448, in finish_recv
raise ConnectionResetError(*exc.args)
ConnectionResetError: [WinError 64] The specified network name is no longer available
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\vstinner\python\master\lib\asyncio\events.py", line 81, in _run
self._context.run(self._callback, *self._args)
File "C:\vstinner\python\master\lib\asyncio\proactor_events.py", line 283, in _loop_reading
self._force_close(exc)
File "C:\vstinner\python\master\lib\asyncio\proactor_events.py", line 118, in _force_close
self._empty_waiter.set_exception(exc)
asyncio.exceptions.InvalidStateError: invalid state == Tests result: SUCCESS == 1 test OK. Total duration: 531 ms |
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:
The text was updated successfully, but these errors were encountered: