Browse Source

Fix deadlock issue when joining large guilds.

pull/175/merge
Rapptz 9 years ago
parent
commit
8d7dd79673
  1. 2
      discord/client.py
  2. 18
      discord/state.py

2
discord/client.py

@ -378,8 +378,6 @@ class Client:
log.info('Unhandled event {}'.format(event))
else:
result = func(data)
if asyncio.iscoroutine(result):
yield from result
@asyncio.coroutine
def _make_websocket(self, initial=True):

18
discord/state.py

@ -338,6 +338,17 @@ class ConnectionState:
return self._add_server_from_data(data)
@asyncio.coroutine
def _chunk_and_dispatch(self, server, unavailable):
yield from self.chunker(server)
chunks = list(self.chunks_needed(server))
if chunks:
yield from asyncio.wait(chunks)
if unavailable == False:
self.dispatch('server_available', server)
else:
self.dispatch('server_join', server)
def parse_guild_create(self, data):
unavailable = data.get('unavailable')
if unavailable == True:
@ -367,11 +378,8 @@ class ConnectionState:
# since we're not waiting for 'useful' READY we'll just
# do the chunk request here
yield from self.chunker(server)
chunks = list(self.chunks_needed(server))
if chunks:
yield from asyncio.wait(chunks)
utils.create_task(self._chunk_and_dispatch(server, unavailable), loop=self.loop)
return
# Dispatch available if newly available
if unavailable == False:

Loading…
Cancel
Save