diff options
author | Joey Hess <joey@kitenet.net> | 2012-02-15 14:35:49 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-02-15 14:35:49 -0400 |
commit | 505d6b1a06df2d84fd26d9f29025050b7944618a (patch) | |
tree | 056e04347f28ce603ebd736f641c7616f7cecfa2 | |
parent | 4645f836781fd1db91c2b64138d441508a2bb847 (diff) |
fix failure count memory leak
This is the last memory leak that prevents git-annex from running
in constant space, as far as I can see. I can now run git annex find
dummied up to repeatedly find the same file over and over, on millions
olf files, and memory stays entirely constant.
-rw-r--r-- | CmdLine.hs | 4 | ||||
-rw-r--r-- | doc/bugs/git_annex_add_memory_leak.mdwn | 13 |
2 files changed, 8 insertions, 9 deletions
diff --git a/CmdLine.hs b/CmdLine.hs index 0bb345912..fbc1eaeca 100644 --- a/CmdLine.hs +++ b/CmdLine.hs @@ -80,7 +80,9 @@ tryRun' errnum state cmd (a:as) = do a handle (Left err) = showerr err >> cont False state handle (Right (success, state')) = cont success state' - cont success s = tryRun' (if success then errnum else errnum + 1) s cmd as + cont success s = do + let errnum' = if success then errnum else errnum + 1 + (tryRun' $! errnum') s cmd as showerr err = Annex.eval state $ do showErr err showEndFail diff --git a/doc/bugs/git_annex_add_memory_leak.mdwn b/doc/bugs/git_annex_add_memory_leak.mdwn index 891ba318f..4bcffb17b 100644 --- a/doc/bugs/git_annex_add_memory_leak.mdwn +++ b/doc/bugs/git_annex_add_memory_leak.mdwn @@ -24,14 +24,9 @@ A history of the leaks: behind and could affect other git-annex commands. Fixed in versions afer 3.20120123. -* Something is still causing a slow leak when adding files. - I tested by adding many copies of the whole linux kernel - tree into the annex using the WORM backend, and once - it had added 1 million files, git-annex used ~100 mb of ram. - That's 100 bytes leaked per file on average .. roughly the - size of a filename? It's worth noting that `git add` uses more memory - than that in such a large tree. - **not fixed yet** +* The count of the number of failed commands was updated lazily, which + caused a slow leak when running on a lot of files. Fixed in versions afer + 3.20120123. * (Note that `git ls-files --others`, which is used to find files to add, also uses surpsisingly large amounts @@ -40,3 +35,5 @@ A history of the leaks: before outputting anything. This is Not Our Problem, but I'm sure the git developers would appreciate a patch that fixes it.) + +[[done]] |