on master help sign in
Merge pull request #13 from haskell-servant/manager-ioref
83aff14Julian Arni
CHANGELOG.md+2−1
@@ -2,8 +2,9 @@
2---
2---
3* Support content-type aware combinators and `Accept`/`Content-type` headers
3* Support content-type aware combinators and `Accept`/`Content-type` headers
4* Added a lot of tests
4* Added a lot of tests
5+* Support multiple concurrent threads
5
6
60.2.2
70.2.2
7-----
8-----
8* Add TLS support
9* Add TLS support
9−* Add matrix parameter support
10+* Add matrix parameter support
src/Servant/Common/Req.hs+4−6
@@ -3,13 +3,13 @@
3module Servant.Common.Req where
3module Servant.Common.Req where
4
4
5import Control.Applicative
5import Control.Applicative
6−import Control.Concurrent
7import Control.Exception
6import Control.Exception
8import Control.Monad
7import Control.Monad
9import Control.Monad.Catch (MonadThrow)
8import Control.Monad.Catch (MonadThrow)
10import Control.Monad.IO.Class
9import Control.Monad.IO.Class
11import Control.Monad.Trans.Either
10import Control.Monad.Trans.Either
12import Data.ByteString.Lazy hiding (pack, filter, map, null)
11import Data.ByteString.Lazy hiding (pack, filter, map, null)
12+import Data.IORef
13import Data.String
13import Data.String
14import Data.String.Conversions
14import Data.String.Conversions
15import Data.Proxy
15import Data.Proxy
@@ -98,13 +98,11 @@ reqToRequest req (BaseUrl reqScheme reqHost reqPort) =
98-- * performing requests
98-- * performing requests
99
99
100{-# NOINLINE __manager #-}
100{-# NOINLINE __manager #-}
101−__manager :: MVar Manager
101+__manager :: IORef Manager
102−__manager = unsafePerformIO (newManager tlsManagerSettings >>= newMVar)
102+__manager = unsafePerformIO (newManager tlsManagerSettings >>= newIORef)
103
103
104__withGlobalManager :: (Manager -> IO a) -> IO a
104__withGlobalManager :: (Manager -> IO a) -> IO a
105−__withGlobalManager action = modifyMVar __manager $ \ manager -> do
105+__withGlobalManager action = readIORef __manager >>= action
106− result <- action manager
107− return (manager, result)
108
106
109
107
110displayHttpRequest :: Method -> String
108displayHttpRequest :: Method -> String