hpath/unix/tests/signals004.hs

27 lines
756 B
Haskell
Raw Normal View History

2020-04-14 09:27:28 +00:00
import Control.Concurrent
import System.Posix
import Control.Monad
-- signal stress test: threads installing signal handlers while
-- signals are being constantly thrown and caught.
installers = 50
-- too many signals overflows the IO manager's pipe buffer, this seems
-- to be the most we can get away with:
sigs = 400
main = do
c <- newChan
m <- newEmptyMVar
installHandler sigUSR1 (handler c) Nothing
replicateM_ installers (forkIO $ do replicateM_ 1000 (install c); putMVar m ())
replicateM_ sigs (forkIO $ raiseSignal sigUSR1)
replicateM_ installers (takeMVar m)
replicateM_ sigs (readChan c)
handler c = Catch (writeChan c ())
install c = do
old <- installHandler sigUSR1 (handler c) Nothing
installHandler sigUSR1 old Nothing