Recently, SLIME has started exploding for me on lispworks: I get backtraces like this:
================================================================ Error: NIL is not of type SWANK::CONNECTION when accessing slot SWANK-BACKEND:SEND. 1 (abort) Return to level 8. 2 Return to debug level 8. 3 Return to level 7. 4 Return to debug level 7. 5 Return to level 6. 6 Return to debug level 6. 7 Return to level 5. 8 Return to debug level 5. 9 Return to level 4. 10 Return to debug level 4. 11 Return to level 3. 12 Return to debug level 3. 13 Return to level 2. 14 Return to debug level 2. 15 Return to level 1. 16 Return to debug level 1. 17 Return to level 0. 18 Return to top loop level 0.
Type :b for backtrace, :c <option number> to proceed, or :? for other options
XOS 1 : 9 > :b Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to (METHOD STREAM:STREAM-READ-LINE (STREAM:FUNDAMENTAL-STREAM)) Call to (METHOD STREAM:STREAM-FILL-BUFFER (SYSTEM::LINE-BUFFER-STREAM)) Call to (METHOD STREAM:STREAM-READ-CHAR (STREAM:BUFFERED-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to INVOKE-DEBUGGER Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to (METHOD STREAM:STREAM-READ-LINE (STREAM:FUNDAMENTAL-STREAM)) Call to (METHOD STREAM:STREAM-FILL-BUFFER (SYSTEM::LINE-BUFFER-STREAM)) Call to (METHOD STREAM:STREAM-READ-CHAR (STREAM:BUFFERED-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to INVOKE-DEBUGGER Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to (METHOD STREAM:STREAM-READ-LINE (STREAM:FUNDAMENTAL-STREAM)) Call to (METHOD STREAM:STREAM-FILL-BUFFER (SYSTEM::LINE-BUFFER-STREAM)) Call to (METHOD STREAM:STREAM-READ-CHAR (STREAM:BUFFERED-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to INVOKE-DEBUGGER Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to (METHOD STREAM:STREAM-READ-LINE (STREAM:FUNDAMENTAL-STREAM)) Call to (METHOD STREAM:STREAM-FILL-BUFFER (SYSTEM::LINE-BUFFER-STREAM)) Call to (METHOD STREAM:STREAM-READ-CHAR (STREAM:BUFFERED-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to INVOKE-DEBUGGER Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to (METHOD STREAM:STREAM-READ-LINE (STREAM:FUNDAMENTAL-STREAM)) Call to (METHOD STREAM:STREAM-FILL-BUFFER (SYSTEM::LINE-BUFFER-STREAM)) Call to (METHOD STREAM:STREAM-READ-CHAR (STREAM:BUFFERED-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to INVOKE-DEBUGGER Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to (METHOD STREAM:STREAM-READ-LINE (STREAM:FUNDAMENTAL-STREAM)) Call to (METHOD STREAM:STREAM-FILL-BUFFER (SYSTEM::LINE-BUFFER-STREAM)) Call to (METHOD STREAM:STREAM-READ-CHAR (STREAM:BUFFERED-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to INVOKE-DEBUGGER Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to (METHOD STREAM:STREAM-READ-LINE (STREAM:FUNDAMENTAL-STREAM)) Call to (METHOD STREAM:STREAM-FILL-BUFFER (SYSTEM::LINE-BUFFER-STREAM)) Call to (METHOD STREAM:STREAM-READ-CHAR (STREAM:BUFFERED-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to INVOKE-DEBUGGER Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to (METHOD STREAM:STREAM-READ-LINE (STREAM:FUNDAMENTAL-STREAM)) Call to (METHOD STREAM:STREAM-FILL-BUFFER (SYSTEM::LINE-BUFFER-STREAM)) Call to (METHOD STREAM:STREAM-READ-CHAR (STREAM:BUFFERED-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to INVOKE-DEBUGGER Call to SWANK::SEND-TO-EMACS Call to SWANK::READ-USER-INPUT-FROM-EMACS Call to (METHOD STREAM:STREAM-READ-CHAR (SWANK-BACKEND::SLIME-INPUT-STREAM)) Call to IO::READ-OBJECT Call to IO::RECURSIVE-READ Call to READ-PRESERVING-WHITESPACE Call to EDITOR:RUBBER-READ-A-COMMAND Call to (HARLEQUIN-COMMON-LISP:SUBFUNCTION MP::PROCESS-SG-FUNCTION MP::INITIALIZE-PROCESS-STACK)
XOS 2 : 9 > ================================================================
I traced the error to the following form in my code:
(setq *top-level-listener-process* (run-safe-thread "Debug Listener" ; name nil ; keywords #'system::listener-top-level ; function user::*terminal-io*))
So, I conditionalized my application to simply not do this when running under SLIME (i.e. in development mode).
This is not a bug report (or even a complaint!) just an observation that something which used to work no longer does so. I can imagine why replacing the top level listener from behind SLIME's back may not be a good thing.
Perhaps all this is really is a note so that someday, the mechanism by which SLIME communicates with the back ends will be sufficiently well documented that it can say somewhere in the manual that forms like the above are not a good idea if you want to use slime. :-)
p.s. Slime juss keeps on gettin' better! Great work!