From 6e0defe92385c4000ceefa1f9d05beccea7d4d4a Mon Sep 17 00:00:00 2001 From: vsc Date: Tue, 28 Sep 2004 18:37:05 +0000 Subject: [PATCH] bug in dbref arrays with log updates git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1148 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/alloc.c | 7 +++++-- C/arrays.c | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/C/alloc.c b/C/alloc.c index ac2718733..21f330334 100644 --- a/C/alloc.c +++ b/C/alloc.c @@ -12,7 +12,7 @@ * Last rev: * * mods: * * comments: allocating space * -* version:$Id: alloc.c,v 1.58 2004-09-27 20:45:02 vsc Exp $ * +* version:$Id: alloc.c,v 1.59 2004-09-28 18:37:05 vsc Exp $ * *************************************************************************/ #ifdef SCCS static char SccsId[] = "%W% %G%"; @@ -308,6 +308,8 @@ AddToFreeList(BlockHeader *b) *q = b; } +static int vsc_count_b; + static void FreeBlock(BlockHeader *b) { @@ -324,7 +326,8 @@ FreeBlock(BlockHeader *b) /* sanity check */ sp = &(b->b_size) + (b->b_size & ~InUseFlag); - if (*sp != b->b_size) { + if (b == 0x8a04428) vsc_count_b++; + if (!(b->b_size & InUseFlag) || *sp != b->b_size) { #if !SHORT_INTS fprintf(stderr, "%% YAP INTERNAL ERROR: sanity check failed in FreeBlock %p %x %x\n", b, b->b_size, Unsigned(*sp)); diff --git a/C/arrays.c b/C/arrays.c index 220d5fd10..2a0f2608f 100644 --- a/C/arrays.c +++ b/C/arrays.c @@ -243,8 +243,10 @@ AccessNamedArray(Atom a, Int indx) if (ref->Flags & LogUpdMask) { LogUpdClause *cl = (LogUpdClause *)ref; - cl->ClFlags |= InUseMask; - TRAIL_CLREF(cl); + if (!(cl->ClFlags & InUseMask)) { + cl->ClFlags |= InUseMask; + TRAIL_CLREF(cl); + } } else { if (!(ref->Flags & InUseMask)) { ref->Flags |= InUseMask;