1 files changed, 15 insertions, 3 deletions
diff --git a/synapse/handlers/typing.py b/synapse/handlers/typing.py
index ab698b36e1..cd9638dd04 100644
--- a/synapse/handlers/typing.py
+++ b/synapse/handlers/typing.py
@@ -83,9 +83,15 @@ class TypingNotificationHandler(BaseHandler):
if member in self._member_typing_timer:
self.clock.cancel_call_later(self._member_typing_timer[member])
+ def _cb():
+ logger.debug(
+ "%s has timed out in %s", target_user.to_string(), room_id
+ )
+ self._stopped_typing(member)
+
self._member_typing_until[member] = until
self._member_typing_timer[member] = self.clock.call_later(
- timeout / 1000, lambda: self._stopped_typing(member)
+ timeout / 1000.0, _cb
)
if was_present:
@@ -114,6 +120,10 @@ class TypingNotificationHandler(BaseHandler):
member = RoomMember(room_id=room_id, user=target_user)
+ if member in self._member_typing_timer:
+ self.clock.cancel_call_later(self._member_typing_timer[member])
+ del self._member_typing_timer[member]
+
yield self._stopped_typing(member)
@defer.inlineCallbacks
@@ -136,8 +146,10 @@ class TypingNotificationHandler(BaseHandler):
del self._member_typing_until[member]
- self.clock.cancel_call_later(self._member_typing_timer[member])
- del self._member_typing_timer[member]
+ if member in self._member_typing_timer:
+ # Don't cancel it - either it already expired, or the real
+ # stopped_typing() will cancel it
+ del self._member_typing_timer[member]
@defer.inlineCallbacks
def _push_update(self, room_id, user, typing):
|