From b0ac0744e26398eddf55fb7e17ec87fabc9356e3 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:36:02 +0100 Subject: [PATCH] fix server ACK for v1 SMP clients (#436) * fix server ACK for v1 SMP clients * add import --- src/Simplex/Messaging/Server.hs | 2 +- src/Simplex/Messaging/Server/MsgStore/STM.hs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Simplex/Messaging/Server.hs b/src/Simplex/Messaging/Server.hs index a32fc93a3..8de05d83f 100644 --- a/src/Simplex/Messaging/Server.hs +++ b/src/Simplex/Messaging/Server.hs @@ -498,7 +498,7 @@ client clnt@Client {subscriptions, ntfSubscriptions, rcvQ, sndQ} Server {subscri getDelivered sub = do s@Sub {delivered} <- readTVar sub tryTakeTMVar delivered $>>= \msgId' -> - if B.null msgId || msgId == msgId' + if msgId == msgId' || B.null msgId then pure $ Just s else putTMVar delivered msgId' $> Nothing updateStats :: m () diff --git a/src/Simplex/Messaging/Server/MsgStore/STM.hs b/src/Simplex/Messaging/Server/MsgStore/STM.hs index a1bcbe157..3a268115b 100644 --- a/src/Simplex/Messaging/Server/MsgStore/STM.hs +++ b/src/Simplex/Messaging/Server/MsgStore/STM.hs @@ -11,6 +11,7 @@ module Simplex.Messaging.Server.MsgStore.STM where import Control.Concurrent.STM.TBQueue (flushTBQueue) import Control.Monad (when) +import qualified Data.ByteString.Char8 as B import Data.Functor (($>)) import Data.Int (Int64) import Data.Time.Clock.System (SystemTime (systemSeconds)) @@ -60,7 +61,7 @@ instance MonadMsgQueue MsgQueue STM where tryDelMsg (MsgQueue q) msgId' = tryPeekTBQueue q >>= \case Just Message {msgId} - | msgId == msgId' -> tryReadTBQueue q $> True + | msgId == msgId' || B.null msgId' -> tryReadTBQueue q $> True | otherwise -> pure False _ -> pure False @@ -69,7 +70,7 @@ instance MonadMsgQueue MsgQueue STM where tryDelPeekMsg (MsgQueue q) msgId' = tryPeekTBQueue q >>= \case msg_@(Just Message {msgId}) - | msgId == msgId' -> (True,) <$> (tryReadTBQueue q >> tryPeekTBQueue q) + | msgId == msgId' || B.null msgId' -> (True,) <$> (tryReadTBQueue q >> tryPeekTBQueue q) | otherwise -> pure (False, msg_) _ -> pure (False, Nothing)