diff options
| author | Rapptz <[email protected]> | 2016-08-21 11:45:41 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2016-08-21 11:45:41 -0400 |
| commit | 0b6e74ebece6b88beff8eabeecdd10eeb60a08a5 (patch) | |
| tree | 0896d9c7ed7d415473df50f45df2bc5d884e2d10 | |
| parent | Remove download stats badge. (diff) | |
| download | discord.py-0b6e74ebece6b88beff8eabeecdd10eeb60a08a5.tar.xz discord.py-0b6e74ebece6b88beff8eabeecdd10eeb60a08a5.zip | |
Ensure that keep alive threads are closed when a websocket closes.
The library worked with the assumption that whenever the recv call for
the websocket would lead to a closure, the close method would be called
to signal closure and as a result our close method would be called.
This assumption turned out to be false as the websockets library would
instead call an internal function named close_connection instead. So to
solve our problem we need to override this function instead of close.
| -rw-r--r-- | discord/gateway.py | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/discord/gateway.py b/discord/gateway.py index afc622bf..68016cbe 100644 --- a/discord/gateway.py +++ b/discord/gateway.py @@ -318,6 +318,7 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol): state.sequence = None state.session_id = None if data == True: + yield from self.close() raise ResumeWebSocket() yield from self.identify() @@ -459,11 +460,11 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol): self._connection._remove_voice_client(guild_id) @asyncio.coroutine - def close(self, code=1000, reason=''): + def close_connection(self, force=False): if self._keep_alive: self._keep_alive.stop() - yield from super().close(code, reason) + yield from super().close_connection(force=force) class DiscordVoiceWebSocket(websockets.client.WebSocketClientProtocol): """Implements the websocket protocol for handling voice connections. @@ -605,10 +606,10 @@ class DiscordVoiceWebSocket(websockets.client.WebSocketClientProtocol): raise ConnectionClosed(e) from e @asyncio.coroutine - def close(self, code=1000, reason=''): + def close_connection(self, force=False): if self._keep_alive: self._keep_alive.stop() - yield from super().close(code, reason) + yield from super().close_connection(force=force) |