Dynamic links were not saved when a procedure was interrupted.
The typical symptoms would be that the program would jump to
an unpredictable location after a garbage collection. This could
cause it do die with almost any signal, typically illegal instruction
and segmentation violation.
2) Add a gc counter for debugging purposes.
promotional, or sales literature without prior written consent from
MIT in each case. */
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchmmg.c,v 9.39 1987/12/04 22:13:39 jinx Rel $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchmmg.c,v 9.40 1988/02/20 19:50:27 jinx Exp $ */
/* Memory management top level. Garbage collection to disk.
DEFINE_PRIMITIVE ("GARBAGE-COLLECT", Prim_Garbage_Collect, 1)
{
+ extern unsigned long gc_counter;
Pointer GC_Daemon_Proc;
Primitive_1_Arg();
Microcode_Termination(TERM_GC_OUT_OF_SPACE);
/*NOTREACHED*/
}
+ gc_counter += 1;
GC_Reserve = Get_Integer(Arg1);
GC(NIL);
CLEAR_INTERRUPT(INT_GC);
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/boot.c,v 9.45 1988/02/20 06:16:41 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/boot.c,v 9.46 1988/02/20 19:50:46 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
/*NOTREACHED*/
}
\f
+/* Garbage collection debugging utilities. */
+
extern Pointer
*deadly_free,
*deadly_scan;
+extern unsigned long
+ gc_counter;
+
extern void
gc_death();
*deadly_free,
*deadly_scan;
+unsigned long
+ gc_counter = 0;
+
char
gc_death_message_buffer[100];
promotional, or sales literature without prior written consent from
MIT in each case. */
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/memmag.c,v 9.33 1987/12/04 22:18:09 jinx Rel $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/memmag.c,v 9.34 1988/02/20 19:51:38 jinx Rel $ */
/* Memory management top level.
DEFINE_PRIMITIVE("GARBAGE-COLLECT", Prim_Garbage_Collect, 1)
{
+ extern unsigned long gc_counter;
Pointer GC_Daemon_Proc;
Primitive_1_Arg();
Free, MemTop, Heap_Top);
Microcode_Termination(TERM_NO_SPACE);
}
+ gc_counter += 1;
GC_Reserve = Get_Integer(Arg1);
GCFlip();
GC();