control-event 1.2.1.1 → 1.3
raw patch · 4 files changed
+43/−18 lines, 4 filesdep +control-eventdep ~basedep ~containersdep ~stm
Dependencies added: control-event
Dependency ranges changed: base, containers, stm, time
Files
- Control/Event.hs +5/−6
- Control/Event/Relative.hs +8/−8
- Test/Event.hs +1/−1
- control-event.cabal +29/−3
Control/Event.hs view
@@ -74,11 +74,10 @@ -- Asynchronous 'TimerReset' exceptions might occur to indicate a new, -- earlier, alarm time. expireEvents :: EventSystem -> IO ()-expireEvents es = do- block (do- tid <- myThreadId- forever $ catch (unblock (setTID (Just tid) es >> expireEvents' es))- (\TimerReset -> return ()) )+expireEvents es = mask $ \restore -> do+ tid <- myThreadId+ forever $ catch (restore (setTID (Just tid) es >> expireEvents' es))+ (\TimerReset -> return ()) where setTID i es = atomically (writeTVar (esThread es) i) @@ -194,7 +193,7 @@ evtSystemSize :: EventSystem -> STM Int evtSystemSize sys = do evts <- readTVar (esEvents sys)- return $ fold (\(_,m) n -> n + size m) 0 evts+ return $ foldr (\(_,m) n -> n + size m) 0 evts -- |Tracks the alarm time and the earliest event. If an earlier event is added -- the alarm time is updated and TimerReset is thrown to the expireEvent thread
Control/Event/Relative.hs view
@@ -2,10 +2,10 @@ -- event system that should perform better than the Control.Event module -- but does not provide features such as STM action scheduling. module Control.Event.Relative- ( EventId- , addEvent- , delEvent- ) where+ ( EventId+ , addEvent+ , delEvent+ ) where import Prelude hiding (catch) import Control.Concurrent@@ -20,14 +20,14 @@ -- is returned, allowing the event to be canceled. addEvent :: Int -> IO () -> IO EventId addEvent delay event = do- m <- newMVar False- t <- forkIO (eventThread m)- return (t,m)+ m <- newMVar False+ t <- forkIO (eventThread m)+ return (t,m) where eventThread m = do threadDelay delay forkIO $ runThread m- return ()+ return () runThread m = do b <- swapMVar m True when (not b) event
Test/Event.hs view
@@ -42,7 +42,7 @@ decAndPrint a = atomically (do n <- readTVar a- writeTVar a (n - 1) )+ writeTVar a (n - 1) ) setAndCancelTimeout :: Int -> NominalDiffTime -> IO () setAndCancelTimeout n secs = do
control-event.cabal view
@@ -1,5 +1,5 @@ name: control-event-version: 1.2.1.1+version: 1.3 synopsis: Event scheduling system. description: Allows scheduling and canceling of IO actions to be executed at a specified future time.@@ -9,7 +9,7 @@ author: Thomas DuBuisson maintainer: Thomas.DuBuisson@gmail.com build-type: Simple-Cabal-Version: >= 1.2.3+Cabal-Version: >= 2.0 stability: beta tested-with: GHC == 6.10.3 extra-source-files: Test/Event.hs Test/Timeout.hs@@ -19,5 +19,31 @@ time >= 1.1, containers >= 0.1, stm >= 2.1- extensions: DeriveDataTypeable exposed-modules: Control.Event, Control.Event.Timeout, Control.Event.Relative+ default-language: Haskell2010++test-suite control-event-test-absolute+ default-language: Haskell2010+ type: exitcode-stdio-1.0+ hs-source-dirs: Test+ main-is: Event.hs+ ghc-options:+ build-depends:+ base,+ control-event,+ stm,+ containers,+ time++test-suite control-event-test-relative+ default-language: Haskell2010+ type: exitcode-stdio-1.0+ hs-source-dirs: Test+ main-is: Timeout.hs+ ghc-options:+ build-depends:+ base,+ control-event,+ stm,+ containers,+ time