branch: externals/ement
commit c9bcea589534e2d4e2301a080f6bef6d2df208e4
Author: Adam Porter <a...@alphapapa.net>
Commit: Adam Porter <a...@alphapapa.net>

    Fix: (ement-read-receipt-idle-timer) Could be duplicated
    
    Fixes #196.
    
    Reported-by: Phil Sainty <p...@catalyst.net.nz>
---
 README.org |  3 +++
 ement.el   | 10 ++++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/README.org b/README.org
index a6b6ec41ae..b92960332e 100644
--- a/README.org
+++ b/README.org
@@ -316,6 +316,9 @@ Note that, while ~matrix-client~ remains usable, and 
probably will for some time
 + Command ~ement-room-list-next-unread~ could enter an infinite loop.  (Thanks 
to [[https://github.com/vizs][Visuwesh]] and ~@mrtnmrtn:matrix.org~.)
 + Events in notifications buffer could appear out-of-order.  
([[https://github.com/alphapapa/ement.el/issues/191][#191]].  Thanks to 
[[https://github.com/phil-s][Phil Sainty]].)
 
+*Internal*
++ The ~ement-read-receipt-idle-timer~ could be duplicated when using multiple 
sessions.  ([[https://github.com/alphapapa/ement.el/issues/196][#196]].  Thanks 
to [[https://github.com/phil-s][Phil Sainty]].)
+
 ** 0.10
 
 *Security Fixes*
diff --git a/ement.el b/ement.el
index 52d3d28b31..9288470eb1 100644
--- a/ement.el
+++ b/ement.el
@@ -401,14 +401,16 @@ Useful in, e.g. `ement-disconnect-hook', which see."
   "Run idle timer that updates read receipts.
 To be called from `ement-after-initial-sync-hook'.  Timer is
 stored in `ement-read-receipt-idle-timer'."
-  (setf ement-read-receipt-idle-timer (run-with-idle-timer 3 t 
#'ement-room-read-receipt-idle-timer)))
+  (unless (timerp ement-read-receipt-idle-timer)
+    (setf ement-read-receipt-idle-timer (run-with-idle-timer 3 t 
#'ement-room-read-receipt-idle-timer))))
 
 (defun ement--stop-idle-timer (&rest _ignore)
   "Stop idle timer stored in `ement-read-receipt-idle-timer'.
 To be called from `ement-disconnect-hook'."
-  (when (timerp ement-read-receipt-idle-timer)
-    (cancel-timer ement-read-receipt-idle-timer)
-    (setf ement-read-receipt-idle-timer nil)))
+  (unless ement-sessions
+    (when (timerp ement-read-receipt-idle-timer)
+      (cancel-timer ement-read-receipt-idle-timer)
+      (setf ement-read-receipt-idle-timer nil))))
 
 (defun ement-view-initial-rooms (session)
   "View rooms for SESSION configured in `ement-auto-view-rooms'."

Reply via email to