on develop help sign in
Use unbounded-delays to fix Int overflow bug when delaying threads.
commiteade9ef52381acb3a9e9e76b0fa6e108349026a3 authorSid Raval <sid.raval@obsidian.systems> dateMon 25 Jul 2016, 16:43 (10 years ago) parente5b9099
3 files changed+8−4
default.nix+2 reflex-dom.cabal+2−1 src/Reflex/Dom/Time.hs+4−3
default.nix+2
@@ -4,6 +4,7 @@
44, ghc, webkitgtk3-javascriptcore, exception-transformers
55, webkitgtk24x, dependent-sum-template, bifunctors, bimap
66, raw-strings-qq, zenc, random, monad-control, keycode, hlint
7+, unbounded-delays
78}:
89
910mkDerivation {
@@ -32,6 +33,7 @@ mkDerivation {
3233 these
3334 transformers
3435 zenc
36+ unbounded-delays
3537 ] ++ (if ghc.isGhcjs or false then [] else [
3638 raw-strings-qq
3739 webkitgtk3-javascriptcore
reflex-dom.cabal+2−1
@@ -51,7 +51,8 @@ library
5151 bifunctors >= 4.2 && < 6,
5252 bimap >= 0.3 && < 0.4,
5353 monad-control >= 1.0.1 && < 1.1,
54− keycode == 0.2.*
54+ keycode == 0.2.*,
55+ unbounded-delays == 0.1.0.9
5556
5657 if impl(ghcjs)
5758 hs-source-dirs: src-ghcjs
src/Reflex/Dom/Time.hs+4−3
@@ -11,6 +11,7 @@ import Reflex.Dom.PerformEvent.Class
1111import Reflex.Dom.PostBuild.Class
1212
1313import Control.Concurrent
14+import qualified Control.Concurrent.Thread.Delay as Concurrent
1415import Control.Monad
1516import Control.Monad.Fix
1617import Control.Monad.IO.Class
@@ -51,7 +52,7 @@ tickLossyFrom dt t0 e = do
5152 return result
5253 where callAtNextInterval _ cb = void $ liftIO $ forkIO $ do
5354 tick <- getCurrentTick dt t0
54− threadDelay $ ceiling $ (dt - _tickInfo_alreadyElapsed tick) * 1000000
55+ Concurrent.delay $ ceiling $ (dt - _tickInfo_alreadyElapsed tick) * 1000000
5556 cb tick
5657
5758clockLossy :: (MonadIO m, PerformEvent t m, TriggerEvent t m, MonadIO (Performable m), PostBuild t m, MonadHold t m, MonadFix m) => NominalDiffTime -> UTCTime -> m (Dynamic t TickInfo)
@@ -70,7 +71,7 @@ getCurrentTick dt t0 = do
7071-- | Delay an Event's occurrences by a given amount in seconds.
7172delay :: (PerformEvent t m, TriggerEvent t m, MonadIO (Performable m)) => NominalDiffTime -> Event t a -> m (Event t a)
7273delay dt e = performEventAsync $ ffor e $ \a cb -> liftIO $ void $ forkIO $ do
73− threadDelay $ ceiling $ dt * 1000000
74+ Concurrent.delay $ ceiling $ dt * 1000000
7475 cb a
7576
7677-- | Send events with Poisson timing with the given basis and rate
@@ -157,7 +158,7 @@ inhomogeneousPoissonFrom rnd rate maxRate t0 e = do
157158 alreadyElapsed = diffUTCTime t tTargetLast
158159 tTarget = addUTCTime dt tTargetLast
159160 thisDelay = realToFrac $ diffUTCTime tTarget t :: Double
160− threadDelay $ ceiling $ thisDelay * 1000000
161+ Concurrent.delay $ ceiling $ thisDelay * 1000000
161162 _ <- cb (TickInfo t nEvents alreadyElapsed, p)
162163 go tTarget nextGen' cb nEvents
163164