diff --git a/lisp/gencgc.c b/lisp/gencgc.c index 93c70ce67af255e6c347395ff22b9144d0b97b4d..4c4a3681b7e52d8af478ba4745ae94286de0f5a9 100644 --- a/lisp/gencgc.c +++ b/lisp/gencgc.c @@ -7,7 +7,7 @@ * * Douglas Crosher, 1996, 1997. * - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.6 1997/12/03 08:17:02 dtc Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.7 1997/12/25 09:33:48 dtc Exp $ * */ #include <stdio.h> @@ -5248,8 +5248,16 @@ garbage_collect_generation(int generation, int raise) } /* Scavenge all the rest of the roots. */ - scavenge((lispobj *) interrupt_handlers, - sizeof(interrupt_handlers) / sizeof(lispobj)); + + /* Scavenge the Lisp functions of the interrupt handlers, taking + care to avoid SIG_DFL, SIG_IGN. */ + for (i = 0; i < NSIG; i++) { + union interrupt_handler handler = interrupt_handlers[i]; + if ((handler.c != SIG_IGN) && (handler.c != SIG_DFL)) + scavenge((lispobj *)(interrupt_handlers + i), 1); + } + + /* Scavenge the binding stack. */ scavenge(binding_stack, (lispobj *)SymbolValue(BINDING_STACK_POINTER) - binding_stack);