From c6ced97bc9a6390fb9b2d0b90f5852892e5619a7 Mon Sep 17 00:00:00 2001 From: shum Date: Thu, 22 Oct 2026 08:57:54 +0000 Subject: [PATCH] smp-server: strict count of expired notifications --- src/Simplex/Messaging/Server/NtfStore.hs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Simplex/Messaging/Server/NtfStore.hs b/src/Simplex/Messaging/Server/NtfStore.hs index 93e213b7d..7673d5b9a 100644 --- a/src/Simplex/Messaging/Server/NtfStore.hs +++ b/src/Simplex/Messaging/Server/NtfStore.hs @@ -15,6 +15,7 @@ module Simplex.Messaging.Server.NtfStore import Control.Concurrent.STM import Control.Monad (foldM) +import Data.Functor (($>)) import Data.Int (Int64) import qualified Data.Map.Strict as M import Data.Time.Clock.System (SystemTime (..)) @@ -50,15 +51,13 @@ deleteExpiredNtfs (NtfStore ns) old = where expireQueue nId = atomically $ TM.lookup nId ns >>= maybe (pure 0) (expire nId) expire nId v = readTVar v >>= \case - [] -> TM.delete nId ns >> pure 0 + [] -> TM.delete nId ns $> 0 -- check the last message first, it is the earliest - ntfs - | systemSeconds (ntfTs $ last ntfs) < old -> do - let !ntfs' = filter (\MsgNtf {ntfTs = ts} -> systemSeconds ts >= old) ntfs - if null ntfs' - then TM.delete nId ns >> pure (length ntfs) - else writeTVar v ntfs' >> pure (length ntfs - length ntfs') - | otherwise -> pure 0 + ntfs | systemSeconds (ntfTs $ last $ ntfs) < old -> do + let !ntfs' = filter (\MsgNtf {ntfTs = ts} -> systemSeconds ts >= old) ntfs + if null ntfs' then TM.delete nId ns else writeTVar v ntfs' + pure $! length ntfs - length ntfs' + _ -> pure 0 deleteEmptyNtfs :: NtfStore -> [(NotifierId, TVar [MsgNtf])] -> IO () deleteEmptyNtfs (NtfStore ns) = mapM_ deleteEmpty