Browse Source

Eliminate race conditions on disconnect (Fixes #1441)

pull/1445/head
Miguel Grinberg 3 weeks ago
parent
commit
288ebb189d
Failed to extract signature
  1. 3
      src/socketio/async_client.py
  2. 2
      src/socketio/client.py
  3. 4
      tests/async/test_client.py
  4. 4
      tests/common/test_client.py

3
src/socketio/async_client.py

@ -191,6 +191,7 @@ class AsyncClient(base_client.BaseClient):
if not self._reconnect_task:
if self.eio.state == 'connected': # pragma: no cover
# connected while sleeping above
print('oops')
continue
break
await self._reconnect_task
@ -324,7 +325,7 @@ class AsyncClient(base_client.BaseClient):
for n in self.namespaces:
await self._send_packet(self.packet_class(packet.DISCONNECT,
namespace=n))
await self.eio.disconnect(abort=True)
await self.eio.disconnect()
async def shutdown(self):
"""Stop the client.

2
src/socketio/client.py

@ -306,7 +306,7 @@ class Client(base_client.BaseClient):
for n in self.namespaces:
self._send_packet(self.packet_class(
packet.DISCONNECT, namespace=n))
self.eio.disconnect(abort=True)
self.eio.disconnect()
def shutdown(self):
"""Stop the client.

4
tests/async/test_client.py

@ -475,7 +475,7 @@ class TestAsyncClient:
c._send_packet.await_args_list[0][0][0].encode()
== expected_packet.encode()
)
c.eio.disconnect.assert_awaited_once_with(abort=True)
c.eio.disconnect.assert_awaited_once_with()
async def test_disconnect_namespaces(self):
c = async_client.AsyncClient()
@ -993,7 +993,7 @@ class TestAsyncClient:
c._send_packet.await_args_list[0][0][0].encode()
== expected_packet.encode()
)
c.eio.disconnect.assert_awaited_once_with(abort=True)
c.eio.disconnect.assert_awaited_once_with()
async def test_shutdown_disconnect_namespaces(self):
c = async_client.AsyncClient()

4
tests/common/test_client.py

@ -633,7 +633,7 @@ class TestClient:
c._send_packet.call_args_list[0][0][0].encode()
== expected_packet.encode()
)
c.eio.disconnect.assert_called_once_with(abort=True)
c.eio.disconnect.assert_called_once_with()
def test_disconnect_namespaces(self):
c = client.Client()
@ -1138,7 +1138,7 @@ class TestClient:
c._send_packet.call_args_list[0][0][0].encode()
== expected_packet.encode()
)
c.eio.disconnect.assert_called_once_with(abort=True)
c.eio.disconnect.assert_called_once_with()
def test_shutdown_disconnect_namespaces(self):
c = client.Client()

Loading…
Cancel
Save