mongoDB 2.3.0.5 → 2.4.0.0
raw patch · 3 files changed
+19/−11 lines, 3 filesdep +stmdep ~tlsPVP ok
version bump matches the API change (PVP)
Dependencies added: stm
Dependency ranges changed: tls
API changes (from Hackage documentation)
Files
- CHANGELOG.md +5/−0
- Database/MongoDB/Internal/Protocol.hs +8/−7
- mongoDB.cabal +6/−4
CHANGELOG.md view
@@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. This project adheres to [Package Versioning Policy](https://wiki.haskell.org/Package_versioning_policy). +## [2.4.0.0] - 2018-05-03++### Fixed+- GHC 8.4 compatibility. isEmptyChan is not available in base 4.11 anymore.+ ## [2.3.0.5] - 2018-03-15 ### Fixed
Database/MongoDB/Internal/Protocol.hs view
@@ -47,8 +47,9 @@ import Data.Maybe (maybeToList) import GHC.Conc (ThreadStatus(..), threadStatus) import Control.Monad (forever)-import Control.Concurrent.Chan (Chan, newChan, readChan, writeChan, isEmptyChan)+import Control.Monad.STM (atomically) import Control.Concurrent (ThreadId, killThread, forkFinally)+import Control.Concurrent.STM.TChan (TChan, newTChan, readTChan, writeTChan, isEmptyTChan) import Control.Exception.Lifted (onException, throwIO, try) @@ -87,7 +88,7 @@ -- | Thread-safe and pipelined connection data Pipeline = Pipeline { vStream :: MVar Transport -- ^ Mutex on handle, so only one thread at a time can write to it- , responseQueue :: Chan (MVar (Either IOError Response)) -- ^ Queue of threads waiting for responses. Every time a response arrive we pop the next thread and give it the response.+ , responseQueue :: TChan (MVar (Either IOError Response)) -- ^ Queue of threads waiting for responses. Every time a response arrive we pop the next thread and give it the response. , listenThread :: ThreadId , finished :: MVar () , serverData :: ServerData@@ -106,14 +107,14 @@ newPipeline :: ServerData -> Transport -> IO Pipeline newPipeline serverData stream = do vStream <- newMVar stream- responseQueue <- newChan+ responseQueue <- atomically newTChan finished <- newEmptyMVar let drainReplies = do- chanEmpty <- isEmptyChan responseQueue+ chanEmpty <- atomically $ isEmptyTChan responseQueue if chanEmpty then return () else do- var <- readChan responseQueue+ var <- atomically $ readTChan responseQueue putMVar var $ Left $ mkIOError doesNotExistErrorType "Handle has been closed"@@ -159,7 +160,7 @@ stream <- readMVar vStream forever $ do e <- try $ readMessage stream- var <- readChan responseQueue+ var <- atomically $ readTChan responseQueue putMVar var e case e of Left err -> Tr.close stream >> ioError err -- close and stop looping@@ -182,7 +183,7 @@ doCall stream = do writeMessage stream message var <- newEmptyMVar- liftIO $ writeChan responseQueue var+ liftIO $ atomically $ writeTChan responseQueue var return $ readMVar var >>= either throwIO return -- return promise -- * Pipe
mongoDB.cabal view
@@ -1,5 +1,5 @@ Name: mongoDB-Version: 2.3.0.5+Version: 2.4.0.0 Synopsis: Driver (client) for MongoDB, a free, scalable, fast, document DBMS Description: This package lets you connect to MongoDB servers and@@ -42,8 +42,9 @@ , monad-control >= 0.3.1 , lifted-base >= 0.1.0.3 , pureMD5+ , stm , tagged- , tls >= 1.2.0+ , tls >= 1.3.0 , time , data-default-class -any , transformers@@ -51,7 +52,7 @@ , hashtables >= 1.1.2.0 , base16-bytestring >= 0.1.1.6 , base64-bytestring >= 1.0.0.1- , nonce >= 1.0.2+ , nonce >= 1.0.5 Exposed-modules: Database.MongoDB Database.MongoDB.Admin@@ -105,7 +106,8 @@ , mtl >= 2 , cryptohash -any , network -any- , nonce+ , nonce >= 1.0.5+ , stm , parsec -any , random -any , random-shuffle -any