diff --git a/Database/MongoDB/Admin.hs b/Database/MongoDB/Admin.hs index 2aa3a87..93267a8 100644 --- a/Database/MongoDB/Admin.hs +++ b/Database/MongoDB/Admin.hs @@ -35,7 +35,7 @@ import Data.IORef (IORef, newIORef, readIORef, writeIORef) import Data.Set (Set) import System.IO.Unsafe (unsafePerformIO) -import qualified Data.HashTable as H +import qualified Data.HashTable.IO as H import qualified Data.Set as Set import Control.Monad.Trans (MonadIO, liftIO) @@ -148,7 +148,7 @@ dropIndexes coll = do -- *** Index cache -type DbIndexCache = H.HashTable Database IndexCache +type DbIndexCache = H.BasicHashTable Database IndexCache -- ^ Cache the indexes we create so repeatedly calling ensureIndex only hits database the first time. Clear cache every once in a while so if someone else deletes index we will recreate it on ensureIndex. type IndexCache = IORef (Set (Collection, IndexName)) @@ -156,7 +156,7 @@ type IndexCache = IORef (Set (Collection, IndexName)) dbIndexCache :: DbIndexCache -- ^ initialize cache and fork thread that clears it every 15 minutes dbIndexCache = unsafePerformIO $ do - table <- H.new (==) (H.hashString . T.unpack) + table <- H.new _ <- forkIO . forever $ threadDelay 900000000 >> clearDbIndexCache return table {-# NOINLINE dbIndexCache #-} diff --git a/Database/MongoDB/Query.hs b/Database/MongoDB/Query.hs index e67a2a8..6840627 100644 --- a/Database/MongoDB/Query.hs +++ b/Database/MongoDB/Query.hs @@ -561,7 +561,7 @@ newCursor :: (MonadIO m, MonadBaseControl IO m) => Database -> Collection -> Bat newCursor db col batchSize dBatch = do var <- newMVar dBatch let cursor = Cursor (db <.> col) batchSize var - mkWeakMVar var (closeCursor cursor) + _ <- mkWeakMVar var (closeCursor cursor) return cursor #if !MIN_VERSION_base(4,6,0) where mkWeakMVar = addMVarFinalizer diff --git a/System/IO/Pipeline.hs b/System/IO/Pipeline.hs index 0a712be..c4787a5 100644 --- a/System/IO/Pipeline.hs +++ b/System/IO/Pipeline.hs @@ -2,7 +2,7 @@ A pipeline closes itself when a read or write causes an error, so you can detect a broken pipeline by checking isClosed. It also closes itself when garbage collected, or you can close it explicitly. -} -{-# LANGUAGE DoRec, RecordWildCards, NamedFieldPuns, ScopedTypeVariables #-} +{-# LANGUAGE RecursiveDo, RecordWildCards, NamedFieldPuns, ScopedTypeVariables #-} {-# LANGUAGE CPP #-} module System.IO.Pipeline ( @@ -69,7 +69,7 @@ newPipeline stream = do rec let pipe = Pipeline{..} listenThread <- forkIO (listen pipe) - mkWeakMVar vStream $ do + _ <- mkWeakMVar vStream $ do killThread listenThread closeStream stream return pipe diff --git a/mongoDB.cabal b/mongoDB.cabal index d36ccc3..5d04491 100644 --- a/mongoDB.cabal +++ b/mongoDB.cabal @@ -37,6 +37,7 @@ Library , monad-control >= 0.3.1 , lifted-base >= 0.1.0.3 , transformers-base >= 0.4.1 + , hashtables >= 1.1.2.0 Exposed-modules: Database.MongoDB Database.MongoDB.Admin