summaryrefslogtreecommitdiff
path: root/utils/benchmarks/events/Signal.hs
diff options
context:
space:
mode:
Diffstat (limited to 'utils/benchmarks/events/Signal.hs')
-rw-r--r--utils/benchmarks/events/Signal.hs26
1 files changed, 26 insertions, 0 deletions
diff --git a/utils/benchmarks/events/Signal.hs b/utils/benchmarks/events/Signal.hs
new file mode 100644
index 0000000000..b4aef9ca7e
--- /dev/null
+++ b/utils/benchmarks/events/Signal.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE FlexibleContexts #-}
+
+import Control.Concurrent
+import System.Posix.Signals (Handler(Catch), sigINT,
+ sigUSR1, sigUSR2,
+ blockSignals,
+ fullSignalSet, installHandler)
+import qualified GHC.Event as EM (new, emState, loop, EventManager)
+import GHC.IORef (readIORef)
+
+handler :: EM.EventManager -> Handler
+handler em = do
+ Catch (readIORef (EM.emState em) >>= print)
+
+main :: IO ()
+main = do
+ mgr <- EM.new
+ blockSignals fullSignalSet
+ _ <- installHandler sigINT (handler mgr) (Just fullSignalSet)
+ putStrLn "INT handler installed"
+ _ <- forkIO $ do
+ threadDelay 1000000
+ _ <- installHandler sigUSR1 (handler mgr) (Just fullSignalSet)
+ _ <- installHandler sigUSR2 (handler mgr) (Just fullSignalSet)
+ putStrLn "USR1 and USR2 handlers installed"
+ EM.loop mgr