From d693868bc0ce0926f5b890dfced56960c8bcf2ab Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 15 May 2023 20:26:18 +0400 Subject: [PATCH] change implementation of time diff calculation (#754) --- .../Messaging/Agent/NtfSubSupervisor.hs | 5 +++-- src/Simplex/Messaging/Util.hs | 18 +++++------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/Simplex/Messaging/Agent/NtfSubSupervisor.hs b/src/Simplex/Messaging/Agent/NtfSubSupervisor.hs index e16c3d9e6..186b2cbb0 100644 --- a/src/Simplex/Messaging/Agent/NtfSubSupervisor.hs +++ b/src/Simplex/Messaging/Agent/NtfSubSupervisor.hs @@ -26,6 +26,7 @@ import Data.Bifunctor (first) import qualified Data.Map.Strict as M import Data.Text (Text) import Data.Time (UTCTime, addUTCTime, getCurrentTime) +import Data.Time.Clock (diffUTCTime) import Simplex.Messaging.Agent.Client import Simplex.Messaging.Agent.Env.SQLite import Simplex.Messaging.Agent.Protocol (ACommand (..), APartyCmd (..), AgentErrorType (..), BrokerErrorType (..), ConnId, NotificationsMode (..), SAEntity (..)) @@ -39,7 +40,7 @@ import Simplex.Messaging.Notifications.Types import Simplex.Messaging.Protocol (NtfServer, ProtocolServer, SMPServer, sameSrvAddr) import Simplex.Messaging.TMap (TMap) import qualified Simplex.Messaging.TMap as TM -import Simplex.Messaging.Util (diffInMicros, threadDelay', tshow, unlessM) +import Simplex.Messaging.Util (diffToMicroseconds, threadDelay', tshow, unlessM) import System.Random (randomR) import UnliftIO import UnliftIO.Concurrent (forkIO, threadDelay) @@ -291,7 +292,7 @@ rescheduleAction doWork ts actionTs | otherwise = do void . atomically $ tryTakeTMVar doWork void . forkIO $ do - liftIO $ threadDelay' $ diffInMicros actionTs ts + liftIO $ threadDelay' $ diffToMicroseconds $ diffUTCTime actionTs ts void . atomically $ tryPutTMVar doWork () pure True diff --git a/src/Simplex/Messaging/Util.hs b/src/Simplex/Messaging/Util.hs index ef9e3ad74..2804ff869 100644 --- a/src/Simplex/Messaging/Util.hs +++ b/src/Simplex/Messaging/Util.hs @@ -12,13 +12,11 @@ import Control.Monad.Trans.Except import Data.Bifunctor (first) import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as B -import Data.Fixed (Fixed (MkFixed), Pico) import Data.Int (Int64) import Data.Text (Text) import qualified Data.Text as T import Data.Text.Encoding (decodeUtf8With) -import Data.Time (nominalDiffTimeToSeconds) -import Data.Time.Clock (UTCTime, diffUTCTime) +import Data.Time (NominalDiffTime, nominalDiffTimeToSeconds) import UnliftIO.Async raceAny_ :: MonadUnliftIO m => [m a] -> m () @@ -117,14 +115,8 @@ threadDelay' time = do threadDelay $ fromIntegral maxWait when (maxWait /= time) $ threadDelay' (time - maxWait) -diffInSeconds :: UTCTime -> UTCTime -> Int64 -diffInSeconds a b = (`div` 1000000_000000) $ diffInPicos a b +diffToMicroseconds :: NominalDiffTime -> Int64 +diffToMicroseconds diff = fromIntegral ((truncate $ diff * 1000000) :: Integer) -diffInMicros :: UTCTime -> UTCTime -> Int64 -diffInMicros a b = (`div` 1000000) $ diffInPicos a b - -diffInPicos :: UTCTime -> UTCTime -> Int64 -diffInPicos a b = fromInteger . fromPico . nominalDiffTimeToSeconds $ diffUTCTime a b - -fromPico :: Pico -> Integer -fromPico (MkFixed i) = i +diffToMilliseconds :: NominalDiffTime -> Int64 +diffToMilliseconds diff = fromIntegral ((truncate $ diff * 1000) :: Integer)