--- a/mercurial/parsers.c Tue Jun 10 17:00:31 2014 -0700
+++ b/mercurial/parsers.c Fri Jun 13 17:42:04 2014 -0500
@@ -1299,7 +1299,7 @@
static const Py_ssize_t capacity = 24;
int *depth, *interesting = NULL;
int i, j, v, ninteresting;
- PyObject *dict = NULL, *keys;
+ PyObject *dict = NULL, *keys = NULL;
long *seen = NULL;
int maxrev = -1;
long final;
@@ -1403,8 +1403,10 @@
final |= i;
j -= 1;
}
- if (final == 0)
- return PyList_New(0);
+ if (final == 0) {
+ keys = PyList_New(0);
+ goto bail;
+ }
dict = PyDict_New();
if (dict == NULL)
@@ -1428,19 +1430,13 @@
keys = PyDict_Keys(dict);
- free(depth);
- free(seen);
- free(interesting);
- Py_DECREF(dict);
-
- return keys;
bail:
free(depth);
free(seen);
free(interesting);
Py_XDECREF(dict);
- return NULL;
+ return keys;
}
/*
--- a/mercurial/revlog.py Tue Jun 10 17:00:31 2014 -0700
+++ b/mercurial/revlog.py Fri Jun 13 17:42:04 2014 -0500
@@ -919,8 +919,13 @@
# preload the cache
try:
- self._chunkraw(revs[0], revs[-1])
- offset, data = self._chunkcache
+ while 1:
+ # ensure that the cache doesn't change out from under us
+ _cache = self._chunkcache
+ self._chunkraw(revs[0], revs[-1])
+ if _cache == self._chunkcache:
+ break
+ offset, data = _cache
except OverflowError:
# issue4215 - we can't cache a run of chunks greater than
# 2G on Windows
@@ -967,13 +972,14 @@
node = nodeorrev
rev = None
+ _cache = self._cache # grab local copy of cache to avoid thread race
cachedrev = None
if node == nullid:
return ""
- if self._cache:
- if self._cache[0] == node:
- return self._cache[2]
- cachedrev = self._cache[1]
+ if _cache:
+ if _cache[0] == node:
+ return _cache[2]
+ cachedrev = _cache[1]
# look up what we need to read
text = None
@@ -1001,7 +1007,7 @@
if iterrev == cachedrev:
# cache hit
- text = self._cache[2]
+ text = _cache[2]
else:
chain.append(iterrev)
chain.reverse()
--- a/tests/test-subrepo-git.t Tue Jun 10 17:00:31 2014 -0700
+++ b/tests/test-subrepo-git.t Fri Jun 13 17:42:04 2014 -0500
@@ -601,11 +601,9 @@
8:3473d20bddcf
$ grep ' s$' .hgsubstate
c4069473b459cf27fd4d7c2f50c4346b4e936599 s
- $ cat s/.hg/hgrc
- cat: s/.hg/hgrc: No such file or directory
+ $ test -f s/.hg/hgrc
[1]
- $ cat s/sub/.hg/hgrc
- cat: s/sub/.hg/hgrc: No such file or directory
+ $ test -f s/sub/.hg/hgrc
[1]
$ cd ..
@@ -636,11 +634,9 @@
$ cd tc
$ hg update -q -C af6d2edbb0d3
- $ cat s/.hg/hgrc
- cat: s/.hg/hgrc: No such file or directory
+ $ test -f s/.hg/hgrc
[1]
- $ cat s/sub/.hg/hgrc
- cat: s/sub/.hg/hgrc: No such file or directory
+ $ test -f s/sub/.hg/hgrc
[1]
$ cd ..
$ hg -R tc pull -q
@@ -652,11 +648,9 @@
9:ed23f7fe024e
$ grep ' s$' .hgsubstate
f262643c1077219fbd3858d54e78ef050ef84fbf s
- $ cat s/.hg/hgrc
- cat: s/.hg/hgrc: No such file or directory
+ $ test -f s/.hg/hgrc
[1]
- $ cat s/sub/.hg/hgrc
- cat: s/sub/.hg/hgrc: No such file or directory
+ $ test -f s/sub/.hg/hgrc
[1]
Test that sanitizing is omitted in meta data area: