Skip to content

Commit bff76c4

Browse files
Fixed bad event object used by asyncio client reconnect logic (Fixes #622)
1 parent eabcc46 commit bff76c4

File tree

3 files changed

+9
-2
lines changed

3 files changed

+9
-2
lines changed

socketio/asyncio_client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,8 @@ async def _trigger_event(self, event, namespace, *args):
380380
event, *args)
381381

382382
async def _handle_reconnect(self):
383+
if self._reconnect_abort is None: # pragma: no cover
384+
self._reconnect_abort = self.eio.create_event()
383385
self._reconnect_abort.clear()
384386
client.reconnecting_clients.append(self)
385387
attempt_count = 0
@@ -457,7 +459,6 @@ async def _handle_eio_message(self, data):
457459
async def _handle_eio_disconnect(self):
458460
"""Handle the Engine.IO disconnection event."""
459461
self.logger.info('Engine.IO connection dropped')
460-
self._reconnect_abort.set()
461462
if self.connected:
462463
for n in self.namespaces:
463464
await self._trigger_event('disconnect', namespace=n)

socketio/client.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def __init__(self, reconnection=True, reconnection_attempts=0,
132132
self.callbacks = {}
133133
self._binary_packet = None
134134
self._reconnect_task = None
135-
self._reconnect_abort = self.eio.create_event()
135+
self._reconnect_abort = None
136136

137137
def is_asyncio_based(self):
138138
return False
@@ -552,6 +552,8 @@ def _trigger_event(self, event, namespace, *args):
552552
event, *args)
553553

554554
def _handle_reconnect(self):
555+
if self._reconnect_abort is None: # pragma: no cover
556+
self._reconnect_abort = self.eio.create_event()
555557
self._reconnect_abort.clear()
556558
reconnecting_clients.append(self)
557559
attempt_count = 0

tests/common/test_client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,7 @@ def on_foo(self, a, b):
852852
def test_handle_reconnect(self, random):
853853
c = client.Client()
854854
c._reconnect_task = 'foo'
855+
c._reconnect_abort = c.eio.create_event()
855856
c._reconnect_abort.wait = mock.MagicMock(return_value=False)
856857
c.connect = mock.MagicMock(
857858
side_effect=[ValueError, exceptions.ConnectionError, None]
@@ -869,6 +870,7 @@ def test_handle_reconnect(self, random):
869870
def test_handle_reconnect_max_delay(self, random):
870871
c = client.Client(reconnection_delay_max=3)
871872
c._reconnect_task = 'foo'
873+
c._reconnect_abort = c.eio.create_event()
872874
c._reconnect_abort.wait = mock.MagicMock(return_value=False)
873875
c.connect = mock.MagicMock(
874876
side_effect=[ValueError, exceptions.ConnectionError, None]
@@ -886,6 +888,7 @@ def test_handle_reconnect_max_delay(self, random):
886888
def test_handle_reconnect_max_attempts(self, random):
887889
c = client.Client(reconnection_attempts=2)
888890
c._reconnect_task = 'foo'
891+
c._reconnect_abort = c.eio.create_event()
889892
c._reconnect_abort.wait = mock.MagicMock(return_value=False)
890893
c.connect = mock.MagicMock(
891894
side_effect=[ValueError, exceptions.ConnectionError, None]
@@ -902,6 +905,7 @@ def test_handle_reconnect_max_attempts(self, random):
902905
def test_handle_reconnect_aborted(self, random):
903906
c = client.Client()
904907
c._reconnect_task = 'foo'
908+
c._reconnect_abort = c.eio.create_event()
905909
c._reconnect_abort.wait = mock.MagicMock(side_effect=[False, True])
906910
c.connect = mock.MagicMock(side_effect=exceptions.ConnectionError)
907911
c._handle_reconnect()

0 commit comments

Comments
 (0)