summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-02-15 14:35:49 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-02-15 14:35:49 -0400
commit505d6b1a06df2d84fd26d9f29025050b7944618a (patch)
tree056e04347f28ce603ebd736f641c7616f7cecfa2
parent4645f836781fd1db91c2b64138d441508a2bb847 (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.hs4
-rw-r--r--doc/bugs/git_annex_add_memory_leak.mdwn13
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]]