More data points:
1. I thought this was reproducible but it isn't... :(
2. The reason for all this may be that SLIME (or CMUCL?) gets confused by CLSQL's reader syntax. What happens is that I look for the definition of GET-PROJECTS-FOR-COSTS but SLIME (if it doesn't hang) "finds" the definition for GET-PROJECTS which is two top-level forms off. The relevant part of the code looks like this:
#.(clsql:locally-enable-sql-reader-syntax)
(defun get-project (id) (first (db-select 'project :where [= [id] id])))
(defun get-projects () (db-select 'project))
#.(clsql:restore-sql-reader-syntax-state)
(defun get-projects-for-costs () (sort (let ((parent-hash (make-hash-table)) (projects (get-projects))) (dolist (project projects) (setf (gethash (parent-id project) parent-hash) t)) (loop for project in projects unless (gethash (id project) parent-hash) collect project)) #'project<))
3. In my ~/.cmucl-init I have the form
(mp::startup-idle-and-top-level-loops)
at the end. This could be the reason for the strange restart I got offered.
4. My initial suspicion was that this behaviour is due to a recent SLIME update. However, if it really is due to CLSQL's syntax that would also be an explanation because I only recently started using this syntax. (And I also did it in another project involving AllegroCL which might explain that I have similar problems with Franz' implementation.)
Nevertheless, the fact that usage of this syntax can potentially kill Emacs/SLIME makes me kind of nervous...
Cheers, Edi.