@@ -94,6 +94,7 @@ data Details =
9494
9595verify :: Stuff.PackageCache -> Connection -> Registry.Registry -> Map.Map Pkg.Name C.Constraint -> IO (Result (Map.Map Pkg.Name Details))
9696verify cache connection registry constraints =
97+ Stuff.withRegistryLock cache $
9798 case try constraints of
9899 Solver solver ->
99100 solver (State cache connection registry Map.empty)
@@ -130,6 +131,7 @@ data AppSolution =
130131
131132addToApp :: Stuff.PackageCache -> Connection -> Registry.Registry -> Pkg.Name -> Outline.AppOutline -> IO (Result AppSolution)
132133addToApp cache connection registry pkg outline@(Outline.AppOutline _ _ direct indirect testDirect testIndirect) =
134+ Stuff.withRegistryLock cache $
133135 let
134136 allIndirects = Map.union indirect testIndirect
135137 allDirects = Map.union direct testDirect
@@ -349,30 +351,31 @@ data Env =
349351
350352initEnv :: IO (Either Exit.RegistryProblem Env)
351353initEnv =
352− Stuff.withRegistryLock $ \cache ->
353− do mvar <- newEmptyMVar
354− _ <- forkIO $ putMVar mvar =<< Http.getManager
355− maybeRegistry <- Registry.read cache
356− manager <- readMVar mvar
357−
358− case maybeRegistry of
359− Nothing ->
360− do eitherRegistry <- Registry.fetch manager cache
361− case eitherRegistry of
362− Right latestRegistry ->
363− return $ Right $ Env cache manager (Online manager) latestRegistry
364−
365− Left problem ->
366− return $ Left $ problem
367−
368− Just cachedRegistry ->
369− do eitherRegistry <- Registry.update manager cache cachedRegistry
370− case eitherRegistry of
371− Right latestRegistry ->
372− return $ Right $ Env cache manager (Online manager) latestRegistry
373−
374− Left _ ->
375− return $ Right $ Env cache manager Offline cachedRegistry
354+ do mvar <- newEmptyMVar
355+ _ <- forkIO $ putMVar mvar =<< Http.getManager
356+ cache <- Stuff.getPackageCache
357+ Stuff.withRegistryLock cache $
358+ do maybeRegistry <- Registry.read cache
359+ manager <- readMVar mvar
360+
361+ case maybeRegistry of
362+ Nothing ->
363+ do eitherRegistry <- Registry.fetch manager cache
364+ case eitherRegistry of
365+ Right latestRegistry ->
366+ return $ Right $ Env cache manager (Online manager) latestRegistry
367+
368+ Left problem ->
369+ return $ Left $ problem
370+
371+ Just cachedRegistry ->
372+ do eitherRegistry <- Registry.update manager cache cachedRegistry
373+ case eitherRegistry of
374+ Right latestRegistry ->
375+ return $ Right $ Env cache manager (Online manager) latestRegistry
376+
377+ Left _ ->
378+ return $ Right $ Env cache manager Offline cachedRegistry
376379
377380
378381