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;