fix Annex.repoSize sharing between threads

This commit is contained in:
Joey Hess 2024-08-16 10:56:51 -04:00
parent e361b9ea3c
commit 61d95627f3
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 56 additions and 46 deletions

View file

@ -14,17 +14,19 @@ import qualified Annex
import Types.RepoSize
import Logs.Presence.Pure
import Control.Concurrent
import qualified Data.Map.Strict as M
updateRepoSize :: UUID -> Key -> LogStatus -> Annex ()
updateRepoSize u k s = Annex.getState Annex.reposizes >>= \case
Nothing -> noop
Just sizemap -> do
let !sizemap' = M.adjust
(fromMaybe (RepoSize 0) . f k . Just)
u sizemap
Annex.changeState $ \st -> st
{ Annex.reposizes = Just sizemap' }
updateRepoSize u k s = do
rsv <- Annex.getRead Annex.reposizes
liftIO (takeMVar rsv) >>= \case
Nothing -> liftIO (putMVar rsv Nothing)
Just sizemap -> do
let !sizemap' = M.adjust
(fromMaybe (RepoSize 0) . f k . Just)
u sizemap
liftIO $ putMVar rsv (Just sizemap')
where
f = case s of
InfoPresent -> addKeyRepoSize