# HG changeset patch # User Wei, Elson # Date 2013-07-25 09:35:53 # Node ID f2dfda6ac1520ec241f35b636af5d1198a77d611 # Parent 8704477ad3b6b6ffd93f0ab33cfb4b7c8ce81247 ancestor.deepest: decrement ninteresting correctly (issue3984) The invariant this code tries to hold is that ninteresting is the number of non-zero elements in the interesting array. interesting[nsp] is incremented at the same time as interesting[sp] is decremented. So if interesting[nsp] was previously 0, ninteresting shouldn't be decremented. diff --git a/mercurial/parsers.c b/mercurial/parsers.c --- a/mercurial/parsers.c +++ b/mercurial/parsers.c @@ -1362,10 +1362,10 @@ static PyObject *find_deepest(indexObjec if (nsp == sp) continue; seen[p] = nsp; + interesting[sp] -= 1; + if (interesting[sp] == 0 && interesting[nsp] > 0) + ninteresting -= 1; interesting[nsp] += 1; - interesting[sp] -= 1; - if (interesting[sp] == 0) - ninteresting -= 1; } } interesting[sv] -= 1;