New submission from STINNER Victor <vstin...@redhat.com>:
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 a19fb3c6aaa7632410d1d9dcb395d7101d124da4 Author: Andrew Svetlov <andrew.svet...@gmail.com> Date: Sun Feb 25 19:32:14 2018 +0300 bpo-32622: Native sendfile on windows (#5565) * Support sendfile on Windows Proactor event loop naively. 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 Tests result: SUCCESS ---------- components: Windows, asyncio messages: 333192 nosy: asvetlov, paul.moore, steve.dower, tim.golden, vstinner, yselivanov, zach.ware priority: normal severity: normal status: open title: asyncio: bug in _ProactorBasePipeTransport._force_close() versions: Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue35682> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com