@@ -19,13 +19,13 @@ module Network.Wai.Handler.Warp.Timeout (
1919 ) where
2020
2121#if MIN_VERSION_base(4,6,0)
22−import Control.Concurrent (mkWeakThreadId)
22+import Control.Concurrent (mkWeakThreadId, ThreadId)
2323#else
24−import GHC.Conc.Sync (ThreadId (..))
24+import Control.Concurrent (ThreadId(..))
2525import GHC.Exts (mkWeak#)
2626import GHC.IO (IO (IO))
27−import GHC.Weak (Weak (..))
2827#endif
28+import GHC.Weak (Weak (..))
2929import Control.Concurrent (forkIO, threadDelay, myThreadId, killThread)
3030import qualified Control.Exception as E
3131import Control.Monad (forever, void)
@@ -115,7 +115,10 @@ register (Manager ref) onTimeout = do
115115registerKillThread :: Manager -> IO Handle
116116registerKillThread m = do
117117 wtid <- myThreadId >>= mkWeakThreadId
118− register m $ deRefWeak wtid >>= maybe (return ()) killThread
118+ register m $ killIfExist wtid
119+
120+killIfExist :: Weak ThreadId -> TimeoutAction
121+killIfExist wtid = deRefWeak wtid >>= maybe (return ()) killThread
119122
120123#if !MIN_VERSION_base(4,6,0)
121124mkWeakThreadId :: ThreadId -> IO (Weak ThreadId)