0.8alpha.0.32:
[sbcl.git] / src / code / cold-init.lisp
index 2b7f329..fc26b92 100644 (file)
@@ -22,8 +22,8 @@
 ;;; anything whose name matches a magic character pattern is
 ;;; uninterned.
 ;;;
-;;; FIXME: should also go through globaldb (and perhaps other tables)
-;;; blowing away associated entries
+;;; FIXME: Are there other tables that need to have entries removed?
+;;; What about symbols of the form DEF!FOO?
 (defun !unintern-init-only-stuff ()
   (do ((any-changes? nil nil))
       (nil)
                         (string= name "*!" :end1 2 :end2 2)))
            (/show0 "uninterning cold-init-only symbol..")
            (/primitive-print name)
+           ;; FIXME: Is this (FIRST (LAST *INFO-ENVIRONMENT*)) really
+           ;; meant to be an idiom to use?  Is there a more obvious
+           ;; name for this? [e.g. (GLOBAL-ENVIRONMENT)?]
+           (do-info ((first (last *info-environment*))
+                           :name entry :class class :type type)
+             (when (eq entry symbol)
+               (clear-info class type entry)))
            (unintern symbol package)
            (setf any-changes? t)))))
     (unless any-changes?
@@ -88,8 +95,7 @@
   (setf *gc-notify-stream* nil
         *before-gc-hooks* nil
         *after-gc-hooks* nil
-        *already-maybe-gcing* t
-       *gc-inhibit* t
+       *gc-inhibit* 1
        *need-to-collect-garbage* nil
        sb!unix::*interrupts-enabled* t
        sb!unix::*interrupt-pending* nil
   (setf *cold-init-complete-p* t)
 
   ;; The system is finally ready for GC.
-  (setf *already-maybe-gcing* nil)
   (/show0 "enabling GC")
   (gc-on)
   (/show0 "doing first GC")
@@ -270,7 +275,6 @@ instead (which is another name for the same thing)."))
       (os-cold-init-or-reinit)
       (stream-reinit)
       (signal-cold-init-or-reinit)
-      (gc-reinit)
       (setf (sb!alien:extern-alien "internal_errors_enabled" boolean) t)
       ;; PRINT seems not to like x86 NPX denormal floats like
       ;; LEAST-NEGATIVE-SINGLE-FLOAT, so the :UNDERFLOW exceptions are
@@ -286,8 +290,9 @@ instead (which is another name for the same thing)."))
       ;; reason.. (Perhaps we should do it anyway in case someone
       ;; manages to save an image from within a pseudo-atomic-atomic
       ;; operation?)
-      #!+x86 (setf *pseudo-atomic-atomic* 0))
-    (gc-on)))
+      #!+x86 (setf *pseudo-atomic-atomic* 0)))
+  (gc-on)
+  (gc))
 \f
 ;;;; some support for any hapless wretches who end up debugging cold
 ;;;; init code