From 0ebea155065cdd666efdea841e041e7bff09a002 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 31 Mar 2026 23:57:50 +0100 Subject: [PATCH] agent: refactor cleanup if no pending subs (#1757) --- src/Simplex/Messaging/Client/Agent.hs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Simplex/Messaging/Client/Agent.hs b/src/Simplex/Messaging/Client/Agent.hs index e92af737a..76b2a7cf9 100644 --- a/src/Simplex/Messaging/Client/Agent.hs +++ b/src/Simplex/Messaging/Client/Agent.hs @@ -47,6 +47,7 @@ import Crypto.Random (ChaChaDRG) import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as B import Data.Constraint (Dict (..)) +import Data.Functor (($>)) import Data.List.NonEmpty (NonEmpty) import qualified Data.List.NonEmpty as L import Data.Map.Strict (Map) @@ -328,11 +329,12 @@ reconnectClient ca@SMPClientAgent {active, agentCfg, smpSubWorkers, workerSeq} s atomically $ putTMVar (sessionVar v) a runSubWorker v = withRetryInterval (reconnectInterval agentCfg) $ \_ loop -> do - subs <- atomically $ do - s <- getPending TM.lookup readTVar - when (noPending s) $ cleanup v - pure s - unless (noPending subs) $ whenM (readTVarIO active) $ do + subs_ <- atomically $ do + s <- getPending TM.lookup readTVar + if noPending s + then cleanup v $> Nothing + else pure $ Just s + forM_ subs_ $ \subs -> whenM (readTVarIO active) $ do void $ netTimeoutInt tcpConnectTimeout NRMBackground `timeout` runExceptT (reconnectSMPClient ca srv subs) loop ProtocolClientConfig {networkConfig = NetworkConfig {tcpConnectTimeout}} = smpCfg agentCfg