diff options
author | Joey Hess <joey@kitenet.net> | 2012-06-17 14:02:40 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-06-17 14:02:40 -0400 |
commit | e84b78f40c5ae20031c1d5cdde524081774de656 (patch) | |
tree | 909198899fa9682d9cca0a0cae52a8ff806d6ed5 | |
parent | 9356f11c6077f61e6bda9758f12b3f76b68991e3 (diff) |
reorg
-rw-r--r-- | Utility/ThreadLock.hs | 16 | ||||
-rw-r--r-- | Utility/ThreadScheduler.hs | 15 |
2 files changed, 15 insertions, 16 deletions
diff --git a/Utility/ThreadLock.hs b/Utility/ThreadLock.hs index 4285c0ec5..c029a2b0c 100644 --- a/Utility/ThreadLock.hs +++ b/Utility/ThreadLock.hs @@ -7,11 +7,7 @@ module Utility.ThreadLock where -import Common - -import System.Posix.Terminal import Control.Concurrent.MVar -import System.Posix.Signals type Lock = MVar () @@ -21,15 +17,3 @@ newLock = newMVar () {- Runs an action with a lock held, so only one thread at a time can run it. -} withLock :: Lock -> IO a -> IO a withLock lock = withMVar lock . const - -{- Pauses the main thread, letting children run until program termination. -} -waitForTermination :: IO () -waitForTermination = do - lock <- newEmptyMVar - check softwareTermination lock - whenM (queryTerminal stdInput) $ - check keyboardSignal lock - takeMVar lock - where - check sig lock = void $ - installHandler sig (CatchOnce $ putMVar lock ()) Nothing diff --git a/Utility/ThreadScheduler.hs b/Utility/ThreadScheduler.hs index 9204cd9b9..6557398fd 100644 --- a/Utility/ThreadScheduler.hs +++ b/Utility/ThreadScheduler.hs @@ -9,7 +9,10 @@ module Utility.ThreadScheduler where import Common + import Control.Concurrent +import System.Posix.Terminal +import System.Posix.Signals newtype Seconds = Seconds { fromSeconds :: Int } deriving (Eq, Ord, Show) @@ -40,3 +43,15 @@ unboundDelay time = do let maxWait = min time $ toInteger (maxBound :: Int) threadDelay $ fromInteger maxWait when (maxWait /= time) $ unboundDelay (time - maxWait) + +{- Pauses the main thread, letting children run until program termination. -} +waitForTermination :: IO () +waitForTermination = do + lock <- newEmptyMVar + check softwareTermination lock + whenM (queryTerminal stdInput) $ + check keyboardSignal lock + takeMVar lock + where + check sig lock = void $ + installHandler sig (CatchOnce $ putMVar lock ()) Nothing |