From: <me...@us...> - 2005-08-11 14:44:26
|
Update of /cvsroot/sbcl/sbcl/src/compiler/ppc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11137/src/compiler/ppc Modified Files: parms.lisp Log Message: 0.9.3.41: gc trigger * implementation changes The *NEED-TO-COLLECT-GARBAGE* special is gone. A similar - but per-thread - special: *GC-PENDING* is here. It is set by both gencgc and cheneygc trigger. In threaded builds SIG_STOP_FOR_GC is no longer deferrable by the normal deferral mechanism and rules. It is only deferred in pseudo atomic sections and when *GC-INHIBIT*. There is another per-thread special for this purpose: *STOP-FOR-GC-PENDING*. Whenever *GC-INHI-BIT* is cleared (either by a GC-ON or when exiting a WITHOUT-GCING) the pending gc or the signal handler is run: (when (and (not *gc-inhibit*) (or #!+sb-thread *stop-for-gc-pending* *gc-pending*)) (sb!unix::receive-pending-interrupt)) On the receiving side interrupt_handle_pending is made clever enough not to run pending handlers whose time has not come (i.e. in a WITHOUT-INTERRUPTS it only does gc and leaves the pending handlers alone). * the bugs fixed ** WITHOUT-INTERRUPTS no longer blocks gc from the current or other threads. ** WITHOUT-GCING on the other hand correctly defers gc, be it automatically triggered or explicitly called, and SIG_STOP_FOR_GC. ** GC-{ON,OFF} now work within WITHOUT-GCING, too ** the gc trigger is more reliable as it does not share the interrupt deferral mechanism, most notably sb-sprof does not make triggering gc any harder Index: parms.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/ppc/parms.lisp,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- parms.lisp 14 Jul 2005 18:48:33 -0000 1.21 +++ parms.lisp 11 Aug 2005 14:44:16 -0000 1.22 @@ -168,9 +168,8 @@ *free-interrupt-context-index* sb!unix::*interrupts-enabled* sb!unix::*interrupt-pending* - - - )) + *gc-inhibit* + *gc-pending*)) (defparameter *static-funs* '(length |