have onLocal stop any coprocesses, not only cat-file
I have not seen any other coprocesses being started, but let's avoid problems if any do for whatever reason.
This commit is contained in:
parent
d074532aff
commit
00464fbed7
2 changed files with 12 additions and 10 deletions
|
@ -56,13 +56,15 @@ dupState = do
|
||||||
- Also closes various handles in it. -}
|
- Also closes various handles in it. -}
|
||||||
mergeState :: AnnexState -> Annex ()
|
mergeState :: AnnexState -> Annex ()
|
||||||
mergeState st = do
|
mergeState st = do
|
||||||
st' <- liftIO $ snd <$> run st closehandles
|
st' <- liftIO $ snd <$> run st stopCoProcesses
|
||||||
forM_ (M.toList $ Annex.cleanup st') $
|
forM_ (M.toList $ Annex.cleanup st') $
|
||||||
uncurry addCleanup
|
uncurry addCleanup
|
||||||
Annex.Queue.mergeFrom st'
|
Annex.Queue.mergeFrom st'
|
||||||
changeState $ \s -> s { errcounter = errcounter s + errcounter st' }
|
changeState $ \s -> s { errcounter = errcounter s + errcounter st' }
|
||||||
where
|
|
||||||
closehandles = do
|
{- Stops all long-running git query processes. -}
|
||||||
|
stopCoProcesses :: Annex ()
|
||||||
|
stopCoProcesses = do
|
||||||
catFileStop
|
catFileStop
|
||||||
checkAttrStop
|
checkAttrStop
|
||||||
hashObjectStop
|
hashObjectStop
|
||||||
|
|
|
@ -54,9 +54,9 @@ import qualified Remote.P2P
|
||||||
import P2P.Address
|
import P2P.Address
|
||||||
import Annex.Path
|
import Annex.Path
|
||||||
import Creds
|
import Creds
|
||||||
import Annex.CatFile
|
|
||||||
import Messages.Progress
|
import Messages.Progress
|
||||||
import Types.NumCopies
|
import Types.NumCopies
|
||||||
|
import Annex.Concurrent
|
||||||
|
|
||||||
import Control.Concurrent
|
import Control.Concurrent
|
||||||
import Control.Concurrent.MSampleVar
|
import Control.Concurrent.MSampleVar
|
||||||
|
@ -613,7 +613,7 @@ repairRemote r a = return $ do
|
||||||
{- Runs an action from the perspective of a local remote.
|
{- Runs an action from the perspective of a local remote.
|
||||||
-
|
-
|
||||||
- The AnnexState is cached for speed and to avoid resource leaks.
|
- The AnnexState is cached for speed and to avoid resource leaks.
|
||||||
- However, catFileStop is called to avoid git-cat-file processes hanging
|
- However, coprocesses are stopped to avoid git processes hanging
|
||||||
- around on removable media.
|
- around on removable media.
|
||||||
-
|
-
|
||||||
- The repository's git-annex branch is not updated, as an optimisation.
|
- The repository's git-annex branch is not updated, as an optimisation.
|
||||||
|
@ -637,7 +637,7 @@ onLocal r a = do
|
||||||
go st a' = do
|
go st a' = do
|
||||||
curro <- Annex.getState Annex.output
|
curro <- Annex.getState Annex.output
|
||||||
(ret, st') <- liftIO $ Annex.run (st { Annex.output = curro }) $
|
(ret, st') <- liftIO $ Annex.run (st { Annex.output = curro }) $
|
||||||
catFileStop `after` a'
|
stopCoProcesses `after` a'
|
||||||
cache st'
|
cache st'
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue