Possibly fix possible deadlock

This commit is contained in:
Lonami Exo 2018-10-28 11:52:58 +01:00
parent 45999001be
commit 67c5572d7b

View File

@ -33,6 +33,7 @@ class Connection(abc.ABC):
self._recv_task = None self._recv_task = None
self._send_queue = asyncio.Queue(1) self._send_queue = asyncio.Queue(1)
self._recv_queue = asyncio.Queue(1) self._recv_queue = asyncio.Queue(1)
self._waiting_recv = False
async def connect(self, timeout=None, ssl=None): async def connect(self, timeout=None, ssl=None):
""" """
@ -131,7 +132,10 @@ class Connection(abc.ABC):
if not self._connected: if not self._connected:
raise ConnectionError('Not connected') raise ConnectionError('Not connected')
self._waiting_recv = True
result = await self._recv_queue.get() result = await self._recv_queue.get()
self._waiting_recv = False
if result: if result:
return result return result
else: else:
@ -173,7 +177,9 @@ class Connection(abc.ABC):
msg = 'Unexpected exception in the receive loop' msg = 'Unexpected exception in the receive loop'
__log__.exception(msg) __log__.exception(msg)
await self._recv_queue.put(None) if self._waiting_recv and not self._recv_queue.empty():
await self._recv_queue.put_nowait(None)
self._disconnect(ConnectionError(msg)) self._disconnect(ConnectionError(msg))
@abc.abstractmethod @abc.abstractmethod