Use an IORef
rather than a MVar
.
The job of a manager is to synchronize threads, so it is not necessary to block.
This commit is contained in:
parent
1af0d7b5ab
commit
aeb1136658
1 changed files with 4 additions and 6 deletions
|
@ -3,13 +3,13 @@
|
|||
module Servant.Common.Req where
|
||||
|
||||
import Control.Applicative
|
||||
import Control.Concurrent
|
||||
import Control.Exception
|
||||
import Control.Monad
|
||||
import Control.Monad.Catch (MonadThrow)
|
||||
import Control.Monad.IO.Class
|
||||
import Control.Monad.Trans.Either
|
||||
import Data.ByteString.Lazy hiding (pack, filter, map, null)
|
||||
import Data.IORef
|
||||
import Data.String
|
||||
import Data.String.Conversions
|
||||
import Data.Proxy
|
||||
|
@ -98,13 +98,11 @@ reqToRequest req (BaseUrl reqScheme reqHost reqPort) =
|
|||
-- * performing requests
|
||||
|
||||
{-# NOINLINE __manager #-}
|
||||
__manager :: MVar Manager
|
||||
__manager = unsafePerformIO (newManager tlsManagerSettings >>= newMVar)
|
||||
__manager :: IORef Manager
|
||||
__manager = unsafePerformIO (newManager tlsManagerSettings >>= newIORef)
|
||||
|
||||
__withGlobalManager :: (Manager -> IO a) -> IO a
|
||||
__withGlobalManager action = modifyMVar __manager $ \ manager -> do
|
||||
result <- action manager
|
||||
return (manager, result)
|
||||
__withGlobalManager action = readIORef __manager >>= action
|
||||
|
||||
|
||||
displayHttpRequest :: Method -> String
|
||||
|
|
Loading…
Reference in a new issue