diff --git a/Command/Log.hs b/Command/Log.hs index 9aaebeca69..c3ce679861 100644 --- a/Command/Log.hs +++ b/Command/Log.hs @@ -69,6 +69,7 @@ start :: M.Map UUID String -> TimeZone -> [CommandParam] -> Bool -> FilePath -> (Key, Backend) -> CommandStart start m zone os gource file (key, _) = do showLog output =<< readLog <$> getLog key os + -- getLog produces a zombie; reap it liftIO Git.Command.reap stop where diff --git a/Git/Command.hs b/Git/Command.hs index 2e95628603..f38d6f72fa 100644 --- a/Git/Command.hs +++ b/Git/Command.hs @@ -93,7 +93,11 @@ pipeNullSplit params repo = do pipeNullSplitZombie :: [CommandParam] -> Repo -> IO [String] pipeNullSplitZombie params repo = fst <$> pipeNullSplit params repo -{- Reaps any zombie git processes. -} +{- Reaps any zombie git processes. + - + - Warning: Not thread safe. Anything that was expecting to wait + - on a process and get back an exit status is going to be confused + - if this reap gets there first. -} reap :: IO () reap = do -- throws an exception when there are no child processes diff --git a/Git/HashObject.hs b/Git/HashObject.hs index 7d6b5cc190..e048ce8e53 100644 --- a/Git/HashObject.hs +++ b/Git/HashObject.hs @@ -39,7 +39,6 @@ hashFile h file = CoProcess.query h send receive hashObject :: ObjectType -> String -> Repo -> IO Sha hashObject objtype content repo = getSha subcmd $ do s <- pipeWriteRead (map Param params) content repo - reap -- XXX unsure why this is needed, of if it is anymore return s where subcmd = "hash-object" diff --git a/Remote/Git.hs b/Remote/Git.hs index e7b1ca0e85..b4a730be77 100644 --- a/Remote/Git.hs +++ b/Remote/Git.hs @@ -212,7 +212,7 @@ onLocal r a = do -- No need to update the branch; its data is not used -- for anything onLocal is used to do. Annex.BranchState.disableUpdate - liftIO Git.Command.reap `after` a + a keyUrls :: Git.Repo -> Key -> [String] keyUrls r key = map tourl (annexLocations key)