Closed
Description
- uvloop version: 0.12.2
- Python version: 3.7.3
- Platform: Linux
- Can you reproduce the bug with
PYTHONASYNCIODEBUG
in env?: Yes
I'm seeing the following error appear:
ERROR:asyncio 2019-06-26 16:31:00,938 Fatal error on transport TCPTransport
protocol: <uvloop.loop.SSLProtocol object at 0x7ff364a0cea8>
transport: <TCPTransport closed=False reading=False 0x562875e82178>
Traceback (most recent call last):
File "uvloop/sslproto.pyx", line 574, in uvloop.loop.SSLProtocol._do_shutdown
File "/usr/lib/python3.7/ssl.py", line 767, in unwrap
return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "uvloop/handles/stream.pyx", line 767, in uvloop.loop.__uv_stream_on_read_common
File "uvloop/handles/stream.pyx", line 613, in uvloop.loop.UVStream._on_eof
File "uvloop/sslproto.pyx", line 398, in uvloop.loop.SSLProtocol.eof_received
File "uvloop/sslproto.pyx", line 578, in uvloop.loop.SSLProtocol._do_shutdown
File "uvloop/sslproto.pyx", line 585, in uvloop.loop.SSLProtocol._on_shutdown_complete
AttributeError: 'NoneType' object has no attribute 'cancel'
This looks to be the same issue as aio-libs/aiohttp#3535 and python/cpython#13548, but with an added twist that uvloop's SSLProtocol implementation has a bug of its own. The attribute error is thrown because _shutdown_timeout_handle
has not been set, and it is not set because _start_shutdown
has not been called.
After verification that the issue is still present on master, I worked around this issue by testing for the handle in _on_shutdown_complete
cdef _on_shutdown_complete(self, shutdown_exc):
if self._shutdown_timeout_handle is not None:
self._shutdown_timeout_handle.cancel()
# ...