@@ -9,6 +9,7 @@ module Network.Wai.Handler.Warp.Timeout (
99 , resume
1010 , cancel
1111 , withManager
12+ , dummyHandle
1213 ) where
1314
1415import Control.Concurrent (forkIO, threadDelay, myThreadId, killThread)
@@ -16,6 +17,7 @@ import qualified Control.Exception as E
1617import Control.Monad (forever)
1718import Control.Monad (void)
1819import qualified Data.IORef as I
20+import System.IO.Unsafe (unsafePerformIO)
1921
2022-- FIXME implement stopManager
2123
@@ -23,8 +25,14 @@ import qualified Data.IORef as I
2325newtype Manager = Manager (I.IORef [Handle])
2426
2527-- | A handle used by 'Manager'
28+--
29+-- First field is action to be performed on timeout.
2630data Handle = Handle (IO ()) (I.IORef State)
2731
32+-- | A dummy @Handle@.
33+dummyHandle :: Handle
34+dummyHandle = Handle (return ()) (unsafePerformIO $ I.newIORef Active)
35+
2836data State = Active | Inactive | Paused | Canceled
2937
3038initialize :: Int -> IO Manager