1.1.13: will be tagged as "sbcl-1.1.13"
[sbcl.git] / src / code / gc.lisp
index 44b3ac5..61c351c 100644 (file)
@@ -157,10 +157,6 @@ run in any thread.")
 (progn
   (sb!alien:define-alien-variable ("gc_logfile" %gc-logfile) (* char))
   (defun (setf gc-logfile) (pathname)
-    "Use PATHNAME to log garbage collections. If non-null, the
-designated file is opened before and after each collection, and
-generation statistics are appended to it. To stop writing the log, use
-NIL as the pathname."
     (let ((new (when pathname
                  (sb!alien:make-alien-string
                   (native-namestring (translate-logical-pathname pathname)
@@ -168,14 +164,20 @@ NIL as the pathname."
           (old %gc-logfile))
       (setf %gc-logfile new)
       (when old
-        (sb!alien:free-alien old))))
+        (sb!alien:free-alien old))
+      pathname))
   (defun gc-logfile ()
-    "Return the name of the current GC logfile."
-    (let ((val %gc-logfile))
+    #!+sb-doc
+    "Return the pathname used to log garbage collections. Can be SETF.
+Default is NIL, meaning collections are not logged. If non-null, the
+designated file is opened before and after each collection, and generation
+statistics are appended to it."
+    (let ((val (cast %gc-logfile c-string)))
       (when val
-        (native-pathname (cast val c-string)))))
+        (native-pathname val))))
   (declaim (inline dynamic-space-size))
   (defun dynamic-space-size ()
+    "Size of the dynamic space in bytes."
     (sb!alien:extern-alien "dynamic_space_size" os-vm-size-t)))
 \f
 ;;;; SUB-GC
@@ -253,6 +255,8 @@ NIL as the pathname."
                          ;; turn is a type-error.
                          (when (plusp run-time)
                            (incf *gc-run-time* run-time))))
+                     #!+sb-safepoint
+                     (setf *stop-for-gc-pending* nil)
                      (setf *gc-pending* nil
                            new-usage (dynamic-usage))
                      #!+sb-thread
@@ -303,14 +307,29 @@ NIL as the pathname."
           (call-hooks "after-GC" *after-gc-hooks* :on-error :warn))))))
 
 ;;; This is the user-advertised garbage collection function.
-(defun gc (&key (gen 0) (full nil) &allow-other-keys)
+(defun gc (&key (full nil) (gen 0) &allow-other-keys)
   #!+(and sb-doc gencgc)
-  "Initiate a garbage collection. GEN controls the number of generations
-  to garbage collect."
+  "Initiate a garbage collection.
+
+The default is to initiate a nursery collection, which may in turn
+trigger a collection of one or more older generations as well. If FULL
+is true, all generations are collected. If GEN is provided, it can be
+used to specify the oldest generation guaranteed to be collected.
+
+On CheneyGC platforms arguments FULL and GEN take no effect: a full
+collection is always preformed."
   #!+(and sb-doc (not gencgc))
-  "Initiate a garbage collection. GEN may be provided for compatibility with
-  generational garbage collectors, but is ignored in this implementation."
-  (when (sub-gc :gen (if full 6 gen))
+  "Initiate a garbage collection.
+
+The collection is always a full collection.
+
+Arguments FULL and GEN can be used for compatibility with GENCGC
+platforms: there the default is to initiate a nursery collection,
+which may in turn trigger a collection of one or more older
+generations as well. If FULL is true, all generations are collected.
+If GEN is provided, it can be used to specify the oldest generation
+guaranteed to be collected."
+  (when (sub-gc :gen (if full sb!vm:+pseudo-static-generation+ gen))
     (post-gc)))
 
 (define-alien-routine scrub-control-stack sb!alien:void)
@@ -419,7 +438,8 @@ Note: currently changes to this value are lost when saving core."
       "Number of bytes that can be allocated to GENERATION before that
 generation is considered for garbage collection. This value is meaningless for
 generation 0 (the nursery): see BYTES-CONSED-BETWEEN-GCS instead. Default is
-20Mb. Can be assigned to using SETF. Available on GENCGC platforms only.
+5% of the dynamic space size divided by the number of non-nursery generations.
+Can be assigned to using SETF. Available on GENCGC platforms only.
 
 Experimental: interface subject to change."
     t)
@@ -433,8 +453,8 @@ Experimental: interface subject to change."
     t)
   (def number-of-gcs-before-promotion
       "Number of times garbage collection is done on GENERATION before
-automatic promotion to the next generation is triggered. Can be assigned to
-using SETF. Available on GENCGC platforms only.
+automatic promotion to the next generation is triggered. Default is 1. Can be
+assigned to using SETF. Available on GENCGC platforms only.
 
 Experimental: interface subject to change."
     t)