@@ -1321,7 +1321,7 @@ client
13211321 -- TODO [certs rcv] rcv subscriptions
13221322 Server {subscribers, ntfSubscribers}
13231323 ms
1324- clnt@ Client {clientId, subscriptions, ntfSubscriptions, serviceSubsCount = _todo', ntfServiceSubsCount, rcvQ, sndQ, clientTHParams = thParams'@ THandleParams {sessionId}, procThreads} = do
1324+ clnt@ Client {clientId, subscriptions, ntfSubscriptions, ntfServiceSubscribed, serviceSubsCount = _todo', ntfServiceSubsCount, rcvQ, sndQ, clientTHParams = thParams'@ THandleParams {sessionId}, procThreads} = do
13251325 labelMyThread . B. unpack $ " client $" <> encode sessionId <> " commands"
13261326 let THandleParams {thVersion} = thParams'
13271327 service = peerClientService =<< thAuth thParams'
@@ -1721,18 +1721,19 @@ client
17211721
17221722 subscribeServiceNotifications :: THPeerClientService -> M s BrokerMsg
17231723 subscribeServiceNotifications THClientService {serviceId} = do
1724- srvSubs <- readTVarIO ntfServiceSubsCount
1725- if srvSubs == 0
1726- then
1724+ subscribed <- readTVarIO ntfServiceSubscribed
1725+ if subscribed
1726+ then SOKS <$> readTVarIO ntfServiceSubsCount
1727+ else
17271728 liftIO (getNtfServiceQueueCount @ (StoreQueue s ) (queueStore ms) serviceId) >>= \ case
17281729 Left e -> pure $ ERR e
1729- Right count -> do
1730+ Right ! count' -> do
17301731 atomically $ do
1731- modifyTVar' ntfServiceSubsCount (+ count) -- service count
1732- modifyTVar' (totalServiceSubs ntfSubscribers) (+ count) -- server count for all services
1732+ writeTVar ntfServiceSubscribed True
1733+ count <- swapTVar ntfServiceSubsCount count'
1734+ modifyTVar' (totalServiceSubs ntfSubscribers) (+ (count' - count)) -- server count for all services
17331735 atomically $ writeTQueue (subQ ntfSubscribers) (CSService serviceId, clientId)
1734- pure $ SOKS count
1735- else pure $ SOKS srvSubs
1736+ pure $ SOKS count'
17361737
17371738 acknowledgeMsg :: MsgId -> StoreQueue s -> QueueRec -> M s (Transmission BrokerMsg )
17381739 acknowledgeMsg msgId q qr = time " ACK" $ do
0 commit comments