+installHandler handler
+ | threaded =
+ modifyMVar win32ConsoleHandler $ \old_h -> do
+ (new_h,rc) <-
+ case handler of
+ Default -> do
+ r <- rts_installHandler STG_SIG_DFL nullPtr
+ return (no_handler, r)
+ Ignore -> do
+ r <- rts_installHandler STG_SIG_IGN nullPtr
+ return (no_handler, r)
+ Catch h -> do
+ r <- rts_installHandler STG_SIG_HAN nullPtr
+ return (h, r)
+ prev_handler <-
+ case rc of
+ STG_SIG_DFL -> return Default
+ STG_SIG_IGN -> return Ignore
+ STG_SIG_HAN -> return (Catch old_h)
+ _ -> error "installHandler: Bad threaded rc value"
+ return (new_h, prev_handler)
+
+ | otherwise =