[project @ 1999-07-01 13:48:22 by panne]
authorpanne <unknown>
Thu, 1 Jul 1999 13:48:22 +0000 (13:48 +0000)
committerpanne <unknown>
Thu, 1 Jul 1999 13:48:22 +0000 (13:48 +0000)
The allocator for mega groups now checks if consecutive megablocks on
the free list are contiguous in memory. The omission of this check
caused all kinds of funny runtime errors and took away at least five
happy years of my life...  :-{

ghc/rts/BlockAlloc.c

index 166ef3a..652b629 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: BlockAlloc.c,v 1.5 1999/03/26 14:54:43 simonm Exp $
+ * $Id: BlockAlloc.c,v 1.6 1999/07/01 13:48:22 panne Exp $
  *
  * (c) The GHC Team 1998-1999
  * 
@@ -128,7 +128,9 @@ allocMegaGroup(nat n)
 
     if (bd->blocks == BLOCKS_PER_MBLOCK) {     /* whole megablock found */
 
-      if (grp_start == NULL) { /* is it the first one we've found? */
+      /* is it the first one we've found or a non-contiguous megablock? */
+      if (grp_start == NULL ||
+          bd->start != last->start + MBLOCK_SIZE/sizeof(W_)) {
        grp_start = bd;
        grp_prev  = last;
        mbs_found = 1;