aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2016-08-21 11:45:41 -0400
committerRapptz <[email protected]>2016-08-21 11:45:41 -0400
commit0b6e74ebece6b88beff8eabeecdd10eeb60a08a5 (patch)
tree0896d9c7ed7d415473df50f45df2bc5d884e2d10
parentRemove download stats badge. (diff)
downloaddiscord.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.py9
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)