Skip to content

Commit 7517473

Browse files
Make sure client disconnects when write loop exists (Fixes #454) (#455)
1 parent 6902ffc commit 7517473

3 files changed

Lines changed: 8 additions & 5 deletions

File tree

src/engineio/async_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ async def _read_loop_polling(self):
571571

572572
async def _read_loop_websocket(self):
573573
"""Read packets from the Engine.IO WebSocket connection."""
574-
while self.state == 'connected':
574+
while self.state == 'connected' and self.write_loop_task:
575575
p = None
576576
try:
577577
p = await asyncio.wait_for(
@@ -672,7 +672,6 @@ async def _write_loop(self):
672672
if r.status < 200 or r.status >= 300:
673673
self.logger.warning('Unexpected status code %s in server '
674674
'response, aborting', r.status)
675-
self.write_loop_task = None
676675
break
677676
else:
678677
# websocket
@@ -690,3 +689,4 @@ async def _write_loop(self):
690689
'aborting')
691690
break
692691
self.logger.info('Exiting write loop task')
692+
self.write_loop_task = None

src/engineio/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ def _read_loop_polling(self):
521521

522522
def _read_loop_websocket(self):
523523
"""Read packets from the Engine.IO WebSocket connection."""
524-
while self.state == 'connected':
524+
while self.state == 'connected' and self.write_loop_task:
525525
p = None
526526
try:
527527
p = self.ws.recv()
@@ -616,7 +616,6 @@ def _write_loop(self):
616616
if r.status_code < 200 or r.status_code >= 300:
617617
self.logger.warning('Unexpected status code %s in server '
618618
'response, aborting', r.status_code)
619-
self.write_loop_task = None
620619
break
621620
else:
622621
# websocket
@@ -634,3 +633,4 @@ def _write_loop(self):
634633
'WebSocket connection was closed, aborting')
635634
break
636635
self.logger.info('Exiting write loop task')
636+
self.write_loop_task = None

tests/common/test_socket.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,10 @@ def test_schedule_ping(self):
101101
s = socket.Socket(mock_server, 'sid')
102102
s.send = mock.MagicMock()
103103
s.schedule_ping()
104-
time.sleep(0.05)
104+
for _ in range(10):
105+
time.sleep(0.05)
106+
if s.last_ping is not None:
107+
break
105108
assert s.last_ping is not None
106109
assert s.send.call_args_list[0][0][0].encode() == '2'
107110

0 commit comments

Comments
 (0)