From: Gabor M. <me...@us...> - 2009-02-16 22:13:19
|
Update of /cvsroot/sbcl/sbcl/src/runtime In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv9079/src/runtime Modified Files: interrupt.c Log Message: 1.0.25.25: sig_stop_for_gc_handler looks at GC_INHIBIT first ... else we'd trap on every single pseudo atomic until gc is finally allowed. Index: interrupt.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/interrupt.c,v retrieving revision 1.148 retrieving revision 1.149 diff -u -d -r1.148 -r1.149 --- interrupt.c 16 Feb 2009 21:38:43 -0000 1.148 +++ interrupt.c 16 Feb 2009 21:39:08 -0000 1.149 @@ -769,15 +769,16 @@ struct thread *thread=arch_os_get_current_thread(); sigset_t ss; - if (arch_pseudo_atomic_atomic(context)) { + /* Test for GC_INHIBIT _first_, else we'd trap on every single + * pseudo atomic until gc is finally allowed. */ + if (SymbolValue(GC_INHIBIT,thread) != NIL) { SetSymbolValue(STOP_FOR_GC_PENDING,T,thread); - arch_set_pseudo_atomic_interrupted(context); - FSHOW_SIGNAL((stderr, "sig_stop_for_gc deferred (PA)\n")); + FSHOW_SIGNAL((stderr, "sig_stop_for_gc deferred (*GC-INHIBIT*)\n")); return; - } - else if (SymbolValue(GC_INHIBIT,thread) != NIL) { + } else if (arch_pseudo_atomic_atomic(context)) { SetSymbolValue(STOP_FOR_GC_PENDING,T,thread); - FSHOW_SIGNAL((stderr, "sig_stop_for_gc deferred (*GC-INHIBIT*)\n")); + arch_set_pseudo_atomic_interrupted(context); + FSHOW_SIGNAL((stderr,"sig_stop_for_gc deferred (PA)\n")); return; } |