X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fcode%2Fsave.lisp;h=8cefec9a5ccdb7b2b58b66a54591bd6eaf8ef069;hb=5da5805594423a2d2a841b88617fd2c87fc05750;hp=739e3eaa03137b0e6293d36d15514a0faf7ef1e9;hpb=1f7bb609de31bba1a85817496ecbde52a07edf14;p=sbcl.git diff --git a/src/code/save.lisp b/src/code/save.lisp index 739e3ea..8cefec9 100644 --- a/src/code/save.lisp +++ b/src/code/save.lisp @@ -78,7 +78,7 @@ do not survive intact on all platforms: in this case a WARNING is signalled when saving the core. If no warning is signalled, then the foreign symbol references will remain intact. Platforms where this is currently the case are x86/FreeBSD, x86/Linux, x86/NetBSD, -sparc/Linux, and sparc/SunOS. +sparc/Linux, sparc/SunOS, and ppc/Darwin. This implementation is not as polished and painless as you might like: * It corrupts the current Lisp image enough that the current process @@ -103,8 +103,8 @@ sufficiently motivated to do lengthy fixes." #-gencgc (gc) #+gencgc (gc :full t)) (flet ((restart-lisp () (handling-end-of-the-world - (reinit) - (funcall toplevel)))) + (reinit) + (funcall toplevel)))) ;; FIXME: Perhaps WITHOUT-GCING should be wrapped around the ;; LET as well, to avoid the off chance of an interrupt triggering ;; GC and making our saved RESTART-LISP address invalid? @@ -113,7 +113,9 @@ sufficiently motivated to do lengthy fixes." (get-lisp-obj-address #'restart-lisp))))) (defun deinit () - (mapc #'funcall *save-hooks*) + (dolist (hook *save-hooks*) + (with-simple-restart (continue "Skip this save hook.") + (funcall hook))) (when (fboundp 'cancel-finalization) (cancel-finalization sb!sys:*tty*)) (profile-deinit)