{-# LANGUAGE CPP #-}

module Network.QUIC.Windows (
    windowsThreadBlockHack,
) where

#if defined(mingw32_HOST_OS)
import Control.Concurrent
import qualified Control.Exception as CE
import Control.Monad

windowsThreadBlockHack :: IO a -> IO a
windowsThreadBlockHack act = do
    var <- newEmptyMVar :: IO (MVar (Either CE.SomeException a))
    void . forkIO $ CE.try act >>= putMVar var
    res <- takeMVar var
    case res of
        Left e -> print e >> CE.throwIO e
        Right r -> return r
#else
windowsThreadBlockHack :: IO a -> IO a
windowsThreadBlockHack :: forall a. IO a -> IO a
windowsThreadBlockHack = IO a -> IO a
forall a. a -> a
id
#endif