From ae86ad65757b857337f10f25ff31cb3348d3943d Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 30 Oct 2006 14:27:52 -0800 Subject: [PATCH] git-pickaxe: tighten sanity checks. When compiled for debugging, make sure that refcnt sanity check code detects underflows in origin reference counting. Signed-off-by: Junio C Hamano --- builtin-pickaxe.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/builtin-pickaxe.c b/builtin-pickaxe.c index 3e7277da2..82868328a 100644 --- a/builtin-pickaxe.c +++ b/builtin-pickaxe.c @@ -973,7 +973,9 @@ static void assign_blame(struct scoreboard *sb, struct rev_info *revs, int opt) if (!cmp_suspect(ent->suspect, suspect)) ent->guilty = 1; origin_decref(suspect); - coalesce(sb); + + if (DEBUG) /* sanity */ + sanity_check_refcnt(sb); } } @@ -1341,11 +1343,14 @@ static void sanity_check_refcnt(struct scoreboard *sb) struct blame_entry *ent; for (ent = sb->ent; ent; ent = ent->next) { - /* first mark the ones that haven't been checked */ + /* Nobody should have zero or negative refcnt */ + if (ent->suspect->refcnt <= 0) + baa = 1; + } + for (ent = sb->ent; ent; ent = ent->next) { + /* Mark the ones that haven't been checked */ if (0 < ent->suspect->refcnt) ent->suspect->refcnt = -ent->suspect->refcnt; - else if (!ent->suspect->refcnt) - baa = 1; } for (ent = sb->ent; ent; ent = ent->next) { /* then pick each and see if they have the the @@ -1357,7 +1362,7 @@ static void sanity_check_refcnt(struct scoreboard *sb) if (0 < suspect->refcnt) continue; - suspect->refcnt = -suspect->refcnt; + suspect->refcnt = -suspect->refcnt; /* Unmark */ for (found = 0, e = sb->ent; e; e = e->next) { if (e->suspect != suspect) continue; -- 2.30.2