On Mon, 18 Dec 2006 15:24:09 -0700, "Robert J. Macomber" tbnl@rojoma.com wrote:
So I guess the answer is "don't do that then", at least for now. Putting your startup call in a :after method on asdf:perform doesn't seem to work either, but deferring the startup into a thread of its own (i.e., instead of a toplevel (startup) do (make-thread 'startup)) lets the locks all get released.
Ah, OK. Thanks for the detective work. By coincidence I came across a similar case last Friday. Another, SBCL-specific, workaround is to add a file precompile.lisp to your ASDF system definition that is guaranteed to be the very last file to be compiled and loaded (and that is also guaranteed to be re-compiled whenever something changes in the rest of the system). This file should contain only one form:
(sb-pcl::precompile-random-code-segments)
I don't think this is documented or officially endorsed by the SBCL developers, but it should pre-compile optimized constructors and other CLOS functions.