summaryrefslogtreecommitdiff
path: root/testsuite/tests/rts/RestartEventLogging.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/rts/RestartEventLogging.hs')
-rw-r--r--testsuite/tests/rts/RestartEventLogging.hs35
1 files changed, 35 insertions, 0 deletions
diff --git a/testsuite/tests/rts/RestartEventLogging.hs b/testsuite/tests/rts/RestartEventLogging.hs
new file mode 100644
index 0000000000..5c532895e8
--- /dev/null
+++ b/testsuite/tests/rts/RestartEventLogging.hs
@@ -0,0 +1,35 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+
+import System.IO
+
+import Control.Concurrent
+import Control.Monad (forever, void)
+import GHC.Conc
+
+
+-- Test that the start/end/restartEventLog interface works as expected.
+main :: IO ()
+main = do
+
+ --
+ -- Start other threads to generate some event log events.
+ --
+
+ let loop f = void $ forkIO $ forever (f >> yield)
+
+ -- start lots of short lived threads
+ loop (forkIO $ yield)
+
+ -- sparks
+ loop (let x = 1 + (1 :: Int) in return (par x (sum [0,1,2,3,x])))
+
+ --
+ -- Try restarting event logging a few times.
+ --
+
+ putStrLn "Restarting eventlog..."
+ hFlush stdout
+ c_restart_eventlog
+
+foreign import ccall safe "c_restart_eventlog"
+ c_restart_eventlog :: IO ()