Fixed a memory leak due to excessive strictness when committing journal files.
When hashing the files, the entire list of shas was read strictly. That was entirely unnecessary, since there's a cleanup action run after they're consumed.
This commit is contained in:
parent
82ae30d820
commit
a40ec5e03e
4 changed files with 9 additions and 2 deletions
|
@ -190,7 +190,7 @@ commit message = whenM journalDirty $ lockJournal $ do
|
||||||
{- Commits the staged changes in the index to the branch.
|
{- Commits the staged changes in the index to the branch.
|
||||||
-
|
-
|
||||||
- Ensures that the branch's index file is first updated to the state
|
- Ensures that the branch's index file is first updated to the state
|
||||||
- of the brannch at branchref, before running the commit action. This
|
- of the branch at branchref, before running the commit action. This
|
||||||
- is needed because the branch may have had changes pushed to it, that
|
- is needed because the branch may have had changes pushed to it, that
|
||||||
- are not yet reflected in the index.
|
- are not yet reflected in the index.
|
||||||
-
|
-
|
||||||
|
|
|
@ -19,7 +19,7 @@ hashFiles paths repo = do
|
||||||
fileEncoding toh
|
fileEncoding toh
|
||||||
_ <- forkProcess (feeder toh)
|
_ <- forkProcess (feeder toh)
|
||||||
hClose toh
|
hClose toh
|
||||||
shas <- map Ref . lines <$> hGetContentsStrict fromh
|
shas <- map Ref . lines <$> hGetContents fromh
|
||||||
return (shas, ender fromh pid)
|
return (shas, ender fromh pid)
|
||||||
where
|
where
|
||||||
git_hash_object = gitCommandLine
|
git_hash_object = gitCommandLine
|
||||||
|
|
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -24,6 +24,8 @@ git-annex (3.20120124) UNRELEASED; urgency=low
|
||||||
its head), and records the size in the key.
|
its head), and records the size in the key.
|
||||||
* Fixed to use the strict state monad, to avoid leaking all kinds of memory
|
* Fixed to use the strict state monad, to avoid leaking all kinds of memory
|
||||||
due to lazy state update thunks when adding/fixing many files.
|
due to lazy state update thunks when adding/fixing many files.
|
||||||
|
* Fixed a memory leak due to excessive strictness when committing journal
|
||||||
|
files.
|
||||||
* whereis: Prints the urls of files that the web special remote knows about.
|
* whereis: Prints the urls of files that the web special remote knows about.
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Tue, 24 Jan 2012 16:21:55 -0400
|
-- Joey Hess <joeyh@debian.org> Tue, 24 Jan 2012 16:21:55 -0400
|
||||||
|
|
|
@ -27,6 +27,11 @@ A history of the leaks:
|
||||||
Apparently fixed in versions afer 3.20120123, but this one is not
|
Apparently fixed in versions afer 3.20120123, but this one is not
|
||||||
well understood.
|
well understood.
|
||||||
|
|
||||||
|
* Committing journal files turned out to have another memory leak.
|
||||||
|
After adding a lot of files ran out of memory, this left the journal
|
||||||
|
behind and could affect other git-anne commands. Fixed in versions afer
|
||||||
|
3.20120123.
|
||||||
|
|
||||||
* (Note that `git ls-files --others`, which is used to find files to add,
|
* (Note that `git ls-files --others`, which is used to find files to add,
|
||||||
also uses surpsisingly large amounts
|
also uses surpsisingly large amounts
|
||||||
of memory when you have a lot of files. It buffers
|
of memory when you have a lot of files. It buffers
|
||||||
|
|
Loading…
Reference in a new issue