@@ -3,6 +3,7 @@ module Timeout
4 , initialize
4 , initialize
@@ -10,7 +11,7 @@ module Timeout
12import qualified Data.IORef as I
13import qualified Data.IORef as I
13−import Control.Concurrent (forkIO, threadDelay)
14+import Control.Concurrent (forkIO, threadDelay, myThreadId, killThread)
14import Control.Monad (forever)
15import Control.Monad (forever)
15import qualified Control.Exception as E
16import qualified Control.Exception as E
@@ -52,6 +53,11 @@ register (Manager ref) onTimeout = do
52 I.atomicModifyIORef ref (\x -> (h : x, ()))
53 I.atomicModifyIORef ref (\x -> (h : x, ()))
56+registerKillThread :: Manager -> IO Handle
57+registerKillThread m = do
59+ register m $ killThread tid
55tickle, pause, resume, cancel :: Handle -> IO ()
61tickle, pause, resume, cancel :: Handle -> IO ()
56tickle (Handle _ iactive) = I.writeIORef iactive Active
62tickle (Handle _ iactive) = I.writeIORef iactive Active
57pause (Handle _ iactive) = I.writeIORef iactive Paused
63pause (Handle _ iactive) = I.writeIORef iactive Paused