{-# LANGUAGE CPP #-} module Network.Wai.Handler.Warp.Windows ( windowsThreadBlockHack ) where #if WINDOWS import Control.Exception import Control.Concurrent.MVar import
Control.Concurrent
import Control.Monad
windowsThreadBlockHack
::
IO
a
->
IO
a
windowsThreadBlockHack
act
= do
var
<-
newEmptyMVar
::
IO
(
MVar
(
Either
SomeException
a
))
void
.
forkIO
$
try
act
>>=
putMVar
var
res
<-
takeMVar
var
case
res
of
Left
e
->
throwIO
e
Right
r
->
return
r
#else
windowsThreadBlockHack
::
IO
a
->
IO
a
windowsThreadBlockHack
=
id
#endif