summaryrefslogtreecommitdiff
path: root/Utility
diff options
context:
space:
mode:
Diffstat (limited to 'Utility')
-rw-r--r--Utility/ThreadLock.hs16
-rw-r--r--Utility/ThreadScheduler.hs15
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