diff options
author | Junio C Hamano <junkio@cox.net> | 2006-10-30 14:27:52 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-10-30 14:27:52 -0800 |
commit | ae86ad65757b857337f10f25ff31cb3348d3943d (patch) | |
tree | 7b1053555ce53b1395c8f6869eb982f5f431af9f | |
parent | f5f75c652b9c2347522159a87297820103e593e4 (diff) | |
download | git-ae86ad65757b857337f10f25ff31cb3348d3943d.tar.gz |
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 <junkio@cox.net>
-rw-r--r-- | builtin-pickaxe.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/builtin-pickaxe.c b/builtin-pickaxe.c index 3e7277da21..82868328ac 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; |