From cb3644aad47516ca6ad5c7c579dbc21df99417ab Mon Sep 17 00:00:00 2001 From: Gabor Melis Date: Fri, 19 Aug 2005 13:45:40 +0000 Subject: [PATCH] 0.9.3.64: * scavenge thread->interrupt_fun (one less memory fault in INTERRUPT-THREAD again, heh) --- NEWS | 1 + src/runtime/gencgc.c | 30 +++++++++++++++++------------- version.lisp-expr | 2 +- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/NEWS b/NEWS index dde7081..3e62313 100644 --- a/NEWS +++ b/NEWS @@ -45,6 +45,7 @@ changes in sbcl-0.9.4 relative to sbcl-0.9.3: ** bug fix: lockup when compiled with gcc4 ** bug fix: race that allows the gc to be triggered when gc is inhibited + ** buf fix: one less memory fault in INTERRUPT-THREAD, again * fixed some bugs revealed by Paul Dietz' test suite: ** CALL-NEXT-METHOD signals an error (in safe code) when the call has arguments with a different set of applicable methods from diff --git a/src/runtime/gencgc.c b/src/runtime/gencgc.c index a5904df..b8df9f4 100644 --- a/src/runtime/gencgc.c +++ b/src/runtime/gencgc.c @@ -3623,26 +3623,30 @@ garbage_collect_generation(int generation, int raise) * care to avoid SIG_DFL and SIG_IGN. */ for_each_thread(th) { struct interrupt_data *data=th->interrupt_data; - for (i = 0; i < NSIG; i++) { + for (i = 0; i < NSIG; i++) { union interrupt_handler handler = data->interrupt_handlers[i]; - if (!ARE_SAME_HANDLER(handler.c, SIG_IGN) && - !ARE_SAME_HANDLER(handler.c, SIG_DFL)) { + if (!ARE_SAME_HANDLER(handler.c, SIG_IGN) && + !ARE_SAME_HANDLER(handler.c, SIG_DFL)) { scavenge((lispobj *)(data->interrupt_handlers + i), 1); } } } + /* Scavenge the function list for INTERRUPT-THREAD. */ + for_each_thread(th) { + scavenge(&th->interrupt_fun,1); + } /* Scavenge the binding stacks. */ - { - struct thread *th; - for_each_thread(th) { - long len= (lispobj *)SymbolValue(BINDING_STACK_POINTER,th) - - th->binding_stack_start; - scavenge((lispobj *) th->binding_stack_start,len); + { + struct thread *th; + for_each_thread(th) { + long len= (lispobj *)SymbolValue(BINDING_STACK_POINTER,th) - + th->binding_stack_start; + scavenge((lispobj *) th->binding_stack_start,len); #ifdef LISP_FEATURE_SB_THREAD - /* do the tls as well */ - len=fixnum_value(SymbolValue(FREE_TLS_INDEX,0)) - - (sizeof (struct thread))/(sizeof (lispobj)); - scavenge((lispobj *) (th+1),len); + /* do the tls as well */ + len=fixnum_value(SymbolValue(FREE_TLS_INDEX,0)) - + (sizeof (struct thread))/(sizeof (lispobj)); + scavenge((lispobj *) (th+1),len); #endif } } diff --git a/version.lisp-expr b/version.lisp-expr index 5b4ffe1..0281078 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.9.3.63" +"0.9.3.64" -- 1.7.10.4