From: Gabor M. <me...@us...> - 2009-02-16 22:13:19
|
Update of /cvsroot/sbcl/sbcl/src/code In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv13850/src/code Modified Files: cold-init.lisp gc.lisp Log Message: 1.0.25.31: axe GC-{ON,OFF} ... because they are broken, nobody uses them (?), and complicated to fix. Rationale: - There is no way to safely allow gc in a WITHOUT-GCING without making it entirely useless (nothing like the interrupt protocol with ALLOW-WITH-INTERRUPTS). - WITHOUT-GCING implies WITHOUT-INTERRUPTS because interrupts running with gc disabled may lead to deadlocks (see internals manual on lock ordering and WITHOUT-GCING) or running out of memory. To adhere to this contract GC-{ON,OFF} would need to enable/disable interrupts by setting *INTERRUPTS-ENABLED*, comlicated business for little gain. Index: cold-init.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/cold-init.lisp,v retrieving revision 1.84 retrieving revision 1.85 diff -u -d -r1.84 -r1.85 --- cold-init.lisp 3 Feb 2009 04:15:13 -0000 1.84 +++ cold-init.lisp 16 Feb 2009 21:48:21 -0000 1.85 @@ -258,7 +258,7 @@ #!+hpux (sb!sys:%primitive sb!vm::setup-return-from-lisp-stub) ;; The system is finally ready for GC. (/show0 "enabling GC") - (gc-on) + (setq *gc-inhibit* nil) (/show0 "doing first GC") (gc :full t) (/show0 "back from first GC") Index: gc.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/gc.lisp,v retrieving revision 1.81 retrieving revision 1.82 diff -u -d -r1.81 -r1.82 --- gc.lisp 16 Feb 2009 21:25:44 -0000 1.81 +++ gc.lisp 16 Feb 2009 21:48:21 -0000 1.82 @@ -118,7 +118,7 @@ (declaim (type unsigned-byte *n-bytes-freed-or-purified*)) (defvar *n-bytes-freed-or-purified* 0) (defun gc-reinit () - (gc-on) + (setq *gc-inhibit* nil) (gc) (setf *n-bytes-freed-or-purified* 0 *gc-run-time* 0 @@ -292,18 +292,3 @@ (or #!+sb-thread *stop-for-gc-pending* *gc-pending*)) (sb!unix::receive-pending-interrupt))) - -;;; These work both regardless of whether we're inside WITHOUT-GCING -;;; or not. -(defun gc-on () - #!+sb-doc - "Enable the garbage collector." - (setq *gc-inhibit* nil) - (maybe-handle-pending-gc) - nil) - -(defun gc-off () - #!+sb-doc - "Disable the garbage collector." - (setq *gc-inhibit* t) - nil) |