Fix infinite typing bug
There's a bug somewhere that causes typing notifications to not be timed out properly. By adding a paranoia timer and using correct inequalities notifications should stop being stuck, even if it the root cause hasn't been fixed.
This commit is contained in:
parent
e83a08d795
commit
2ef617bc06
|
@ -88,7 +88,7 @@ class TypingHandler(object):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
until = self._member_typing_until.get(member, None)
|
until = self._member_typing_until.get(member, None)
|
||||||
if not until or until < now:
|
if not until or until <= now:
|
||||||
logger.info("Timing out typing for: %s", member.user_id)
|
logger.info("Timing out typing for: %s", member.user_id)
|
||||||
preserve_fn(self._stopped_typing)(member)
|
preserve_fn(self._stopped_typing)(member)
|
||||||
continue
|
continue
|
||||||
|
@ -97,12 +97,20 @@ class TypingHandler(object):
|
||||||
# user.
|
# user.
|
||||||
if self.hs.is_mine_id(member.user_id):
|
if self.hs.is_mine_id(member.user_id):
|
||||||
last_fed_poke = self._member_last_federation_poke.get(member, None)
|
last_fed_poke = self._member_last_federation_poke.get(member, None)
|
||||||
if not last_fed_poke or last_fed_poke + FEDERATION_PING_INTERVAL < now:
|
if not last_fed_poke or last_fed_poke + FEDERATION_PING_INTERVAL <= now:
|
||||||
preserve_fn(self._push_remote)(
|
preserve_fn(self._push_remote)(
|
||||||
member=member,
|
member=member,
|
||||||
typing=True
|
typing=True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Add a paranoia timer to ensure that we always have a timer for
|
||||||
|
# each person typing.
|
||||||
|
self.wheel_timer.insert(
|
||||||
|
now=now,
|
||||||
|
obj=member,
|
||||||
|
then=now + 60 * 1000,
|
||||||
|
)
|
||||||
|
|
||||||
def is_typing(self, member):
|
def is_typing(self, member):
|
||||||
return member.user_id in self._room_typing.get(member.room_id, [])
|
return member.user_id in self._room_typing.get(member.room_id, [])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue