Mercurial > hg
view tests/test-batching.py.out @ 24710:909ee6b2a024
lazymanifest: prevent leak when updating an entry more than once
__setitem__ on the lazymanifest C type wasn't checking to see if a
line had previously been malloced before replacing it, leading to
leaks if files got updated multiple times in the course of a task.
I was able to reproduce the leak with this change to test-manifest.py:
diff --git a/tests/test-manifest.py b/tests/test-manifest.py
--- a/tests/test-manifest.py
+++ b/tests/test-manifest.py
@@ -456,6 +456,16 @@ class basemanifesttests(object):
['a/b/c/bar.txt', 'a/b/c/foo.txt', 'a/b/d/ten.txt'],
m2.keys())
+ def testManifestSetItem(self):
+ m = self.parsemanifest('')
+ for x in range(3):
+ m['file%d' % x] = BIN_HASH_1
+ for x in range(3):
+ m['file%d' % x] = BIN_HASH_2
+ import time
+ time.sleep(4)
+
+
along with the commands:
$ make local
$ PYTHONPATH=. SILENT_BE_NOISY=1 python tests/test-manifest.py testmanifestdict.testManifestSetItem &
$ sleep 4
$ leaks $(jobs -p | tee /dev/stderr | awk '{print $3}')
$ wait
in an interactive shell on OS X. As far as I can tell, it had to be an
interactive shell so that I could get the pid of the test run using
the jobs builtin. Prior to this change, I was leaking several strings,
and after this change leaks reports no leaks.
I thought there was a bug filed for this in bugzilla, but I can't find
it either in bugzilla or by searching my email.
author | Augie Fackler <augie@google.com> |
---|---|
date | Sat, 11 Apr 2015 11:56:21 -0400 |
parents | 84094c0d2724 |
children | e2fc2122029c |
line wrap: on
line source
== Local Ready. Un and Deux Eins und Zwei One and Two Nope Eins und Zwei Hello, John Smith Ready. Uno und Due == Remote Ready. REQ: foo?one=Vo&two=Efvy -> Vo!boe!Efvy Un and Deux REQ: bar?b=Fjot&a=[xfj -> Fjot!voe![xfj Eins und Zwei REQ: batch?cmds=foo:one=Pof,two=Uxp;bar:b=Fjot,a=[xfj -> Pof!boe!Uxp;Fjot!voe![xfj REQ: greet?name=Kpio!Tnjui -> Ifmmp-!Kpio!Tnjui REQ: batch?cmds=bar:b=Vop,a=Evf -> Vop!voe!Evf One and Two Nope Eins und Zwei Hello, John Smith Ready. Uno und Due