1.0.13.20: added SB-EXT:*EXIT-HOOKS*
[sbcl.git] / src / code / toplevel.lisp
index 4aea10d..4cc0b0c 100644 (file)
@@ -26,8 +26,9 @@
 
 ;;; FIXME: These could be converted to DEFVARs.
 (declaim (special #!+(or x86 x86-64) *pseudo-atomic-bits*
-                  sb!unix::*interrupts-enabled*
-                  sb!unix::*interrupt-pending*
+                  *allow-with-interrupts*
+                  *interrupts-enabled*
+                  *interrupt-pending*
                   *type-system-initialized*))
 
 (defvar *cold-init-complete-p*)
 (defun sysinit-pathname ()
   (or (let ((sbcl-homedir (sbcl-homedir-pathname)))
         (when sbcl-homedir
-          (probe-file (merge-pathnames sbcl-homedir "sbclrc"))))
+          (probe-file (merge-pathnames "sbclrc" sbcl-homedir))))
       #!+win32
-      (merge-pathnames (sb!win32::get-folder-pathname
-                        sb!win32::csidl_common_appdata)
-                       "\\sbcl\\sbclrc")
+      (merge-pathnames "sbcl\\sbclrc"
+                       (sb!win32::get-folder-pathname
+                        sb!win32::csidl_common_appdata))
       #!-win32
       "/etc/sbclrc"))
 
@@ -75,7 +76,9 @@ command-line.")
   (with-unique-names (caught)
     `(let ((,caught (catch '%end-of-the-world
                       (/show0 "inside CATCH '%END-OF-THE-WORLD")
-                      ,@body)))
+                      (unwind-protect
+                           (progn ,@body)
+                        (call-hooks "exit" *exit-hooks*)))))
       (/show0 "back from CATCH '%END-OF-THE-WORLD, flushing output")
       (flush-standard-output-streams)
       (sb!thread::terminate-session)