diff --git a/Git/Command.hs b/Git/Command.hs index f3841c7fa6..e6cec16fb2 100644 --- a/Git/Command.hs +++ b/Git/Command.hs @@ -94,6 +94,12 @@ pipeNullSplit params repo = do where sep = "\0" +pipeNullSplitStrict :: [CommandParam] -> Repo -> IO [String] +pipeNullSplitStrict params repo = do + s <- pipeReadStrict params repo + return $ filter (not . null) $ split sep s + where + sep = "\0" pipeNullSplitZombie :: [CommandParam] -> Repo -> IO [String] pipeNullSplitZombie params repo = leaveZombie <$> pipeNullSplit params repo diff --git a/Git/LsTree.hs b/Git/LsTree.hs index c61ae7faba..6e4cd8470a 100644 --- a/Git/LsTree.hs +++ b/Git/LsTree.hs @@ -29,15 +29,17 @@ data TreeItem = TreeItem , file :: FilePath } deriving Show -{- Lists the complete contents of a tree. -} +{- Lists the complete contents of a tree, with lazy output. -} lsTree :: Ref -> Repo -> IO [TreeItem] -lsTree t repo = map parseLsTree <$> - pipeNullSplitZombie [Params "ls-tree --full-tree -z -r --", File $ show t] repo +lsTree t repo = map parseLsTree <$> pipeNullSplitZombie ps repo + where + ps = [Params "ls-tree --full-tree -z -r --", File $ show t] {- Lists specified files in a tree. -} lsTreeFiles :: Ref -> [FilePath] -> Repo -> IO [TreeItem] -lsTreeFiles t fs repo = map parseLsTree <$> - pipeNullSplitZombie ([Params "ls-tree -z --", File $ show t] ++ map File fs) repo +lsTreeFiles t fs repo = map parseLsTree <$> pipeNullSplitStrict ps repo + where + ps = [Params "ls-tree -z --", File $ show t] ++ map File fs {- Parses a line of ls-tree output. - (The --long format is not currently supported.) -} diff --git a/debian/changelog b/debian/changelog index 75d81ff76e..8fa002604b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,6 +24,8 @@ git-annex (4.20130315) UNRELEASED; urgency=low * webapp: Improved alerts displayed when syncing with remotes, and when syncing with a remote fails. * webapp: Force wrap long filenames in transfer display. + * assistant: The ConfigMonitor left one zombie behind each time + it checked for changes, now fixed. -- Joey Hess Fri, 15 Mar 2013 00:10:07 -0400 diff --git a/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn b/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn index 392090c9da..f556d16e9c 100644 --- a/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn +++ b/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn @@ -24,3 +24,7 @@ Please provide any additional information below. I'm really not sure what to look for next. Happy to take suggestions. [!tag /design/assistant]] + +> [[done]], I found the zombie leak; the ConfigMonitor was +> leaving one zombie every time it checked a push/pull. +> Not a fast leak, but over time they would add up. --[[Joey]]