X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fgencgc.c;h=ea715e32e7ec74335c753cdd89ee5e639e04136f;hb=6ddaf294e5a7e3b1792ed1d9c342894c38538773;hp=a5904dfde55773dcbdd238b9bc211d171902b25b;hpb=40e3ba03d0e1b824e4d1ae75d74246b975b70964;p=sbcl.git diff --git a/src/runtime/gencgc.c b/src/runtime/gencgc.c index a5904df..ea715e3 100644 --- a/src/runtime/gencgc.c +++ b/src/runtime/gencgc.c @@ -2135,6 +2135,7 @@ possibly_valid_dynamic_space_pointer(lispobj *pointer) } switch (widetag_of(start_addr[0])) { case UNBOUND_MARKER_WIDETAG: + case NO_TLS_VALUE_MARKER_WIDETAG: case CHARACTER_WIDETAG: #if N_WORD_BITS == 64 case SINGLE_FLOAT_WIDETAG: @@ -3623,26 +3624,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 } }