In the GARBAGE-COLLECT primitive, return the available heap space
authorTaylor R. Campbell <net/mumble/campbell>
Sat, 10 Feb 2007 19:17:38 +0000 (19:17 +0000)
committerTaylor R. Campbell <net/mumble/campbell>
Sat, 10 Feb 2007 19:17:38 +0000 (19:17 +0000)
minus gc_space_needed, in case it was called by a primitive that
requested a certain amount of space for allocation.  If we report only
the newly available heap space and ignore gc_space_needed, then
GC-FINISH will consider there to be ample space to proceed (more than
4096 bytes), and the primitive will be restarted only to repeat the
call to the GC, looping endlessly.

v7/src/microcode/bchmmg.c
v7/src/microcode/memmag.c

index 7d3af3298f5cd0ea4e5a2860e7e9d51413628408..0bd4b76d9159c8459820bf7cc24be7e115b1ff7c 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: bchmmg.c,v 9.107 2007/01/12 03:45:55 cph Exp $
+$Id: bchmmg.c,v 9.108 2007/02/10 19:17:38 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -3402,7 +3402,7 @@ DEFINE_PRIMITIVE ("GARBAGE-COLLECT", Prim_garbage_collect, 1, 1, 0)
 
  Will_Push (CONTINUATION_SIZE);
   Store_Return (RC_NORMAL_GC_DONE);
-  exp_register = (LONG_TO_UNSIGNED_FIXNUM (MemTop - Free));
+  exp_register = (LONG_TO_UNSIGNED_FIXNUM (MemTop - Free - GC_Space_Needed));
   Save_Cont ();
  Pushed ();
 
index a0fecc3108aed63efec467ae14b51fb6251e264c..f75c786b72914d9cf1a0caf1bcbb36b2813dc8ec 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: memmag.c,v 9.74 2007/01/05 21:19:25 cph Exp $
+$Id: memmag.c,v 9.75 2007/02/10 19:17:38 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -650,7 +650,7 @@ DEFINE_PRIMITIVE ("GARBAGE-COLLECT", Prim_garbage_collect, 1, 1, 0)
 
  Will_Push (CONTINUATION_SIZE);
   Store_Return (RC_NORMAL_GC_DONE);
-  exp_register = (LONG_TO_UNSIGNED_FIXNUM (MemTop - Free));
+  exp_register = (LONG_TO_UNSIGNED_FIXNUM (MemTop - Free - GC_Space_Needed));
   Save_Cont ();
  Pushed ();