remove unncessary locking of ContentIdentifier db

Remote.Helper.ExportImport only reads from it, and locking is only
needed when writing.
This commit is contained in:
Joey Hess 2019-03-06 14:35:16 -04:00
parent c0bd202147
commit b3d30e7d70
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
2 changed files with 5 additions and 16 deletions

View file

@ -19,7 +19,6 @@ import qualified Database.Export as Export
import qualified Database.ContentIdentifier as ContentIdentifier
import Annex.Export
import Annex.Import
import Annex.LockFile
import Config
import Git.Types (fromRef)
import Logs.Export
@ -263,24 +262,22 @@ adjustExportImport r = case M.lookup "exporttree" (config r) of
exportupdated <- liftIO $ newTMVarIO ()
return (dbv, lcklckv, exportinconflict, exportupdated)
-- Only open the database once it's needed, and take an
-- exclusive write lock. The write lock will then remain
-- held while the process is running.
-- Only open the database once it's needed.
getciddb (dbtv, lcklckv) =
liftIO (atomically (tryReadTMVar dbtv)) >>= \case
Just (db, _lck) -> return db
Just db -> return db
-- let only one thread take the lock
Nothing -> ifM (liftIO $ atomically $ tryPutTMVar lcklckv ())
( do
lck <- takeExclusiveLock gitAnnexContentIdentifierLock
db <- ContentIdentifier.openDb
liftIO $ atomically $ putTMVar dbtv (db, lck)
liftIO $ atomically $ putTMVar dbtv db
return db
-- loser waits for winner to open the db and
-- can then also use its handle
, liftIO $ fst <$> atomically (readTMVar dbtv)
, liftIO $ atomically (readTMVar dbtv)
)
-- Only open the database once it's needed.
getexportdb (dbv, lcklckv, _, _) =
liftIO (atomically (tryReadTMVar dbv)) >>= \case
Just db -> return db