All,
I'm experimenting moving over a body of code from LispWorks to SBCL and I've got
some multithreaded code. When using LW, I'd just start up a LW core image on a
command line, manually start up swank, then do slime-connect a couple of times,
and use the 2 repls to experiment / debug the multithreaded code. Specifically,
I've got a shared queue that waits when empty; I'd call the dequeue in repl 1,
see that it properly waits, then enqueue in repl 2 and ideally see the enqueue
return in repl 1; crude, but simple.
I try doing the same thing in SBCL. I start up SBCL in a shell, start up swank,
and I can start up the 1st repl with slime-connect. When I attempt a 2nd
slime-connect, emacs loses the connection to SBCL and I get this in the shell
running SBCL:
WRITE: (:return (:ok (:pid 6102 :style :spawn :lisp-implementation (:type "SBCL"
:name "sbcl" :version "0.9.8") :machine (:instance "localhost.localdomain" :type
"X86" :version "Intel(R) Pentium(R) 4 CPU 2.80GHz") :features (:acl-compat
:cl-ppcre it.bese.arnesi.mopp::have-mop :split-sequence :asdf :sb-thread
:ansi-cl :common-lisp :sbcl :unix :sb-doc :sb-test :sb-package-locks :sb-unicode
:sb-source-locations :ieee-floating-point :x86 :elf :linux :gencgc
:stack-grows-downward-not-upward :c-stack-is-control-stack
:stack-allocatable-closures :linkage-table :os-provides-dlopen
:os-provides-dladdr :os-provides-putwc) :package (:name "COMMON-LISP-USER"
:prompt "CL-USER"))) 1)
WRITE: (:open-dedicated-output-stream 32783)
READ: "(:emacs-rex (swank:connection-info) \"COMMON-LISP-USER\" :repl-thread 1)
"
DISPATCHING: (:EMACS-REX (SWANK:CONNECTION-INFO)
"COMMON-LISP-USER"
:REPL-THREAD
1)
;; Event history end.
;; Connection to Emacs lost. [
;; condition: The value NIL is not of type SB-THREAD:THREAD.
;; type: TYPE-ERROR
;; encoding: :ISO-LATIN-1-UNIX style: :SPAWN dedicated: T]
<sbcl is locked, so I hit control-c and get this:>
debugger invoked on a SIMPLE-CONDITION in thread
#<THREAD "initial thread" {A66D379}>:
interrupted at #XB7FFF402
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Return from SB-UNIX:SIGINT.
1: [ABORT ] Exit debugger, returning to top level.
(SB-UNIX::SIGINT-HANDLER
#<unavailable argument>
#<unavailable argument>
#.(SB-SYS:INT-SAP #XB7B9C5FC))
0]
I'm running SBCL 0.9.8, slime from cvs of 12/27/2005, and Fedora Core 4. I've
got a function for starting up swank:
(defun start-swank (&key (port swank::default-server-port)
(style swank:*communication-style*)
(dont-close t))
"Start the SLIME swank server, listening on PORT. Multiple connections are
allowed."
(swank:create-server :port port
:style style
:dont-close dont-close))
and I call it with default arguments, (start-swank).
Is it possible to drive SBCL like I mentioned at the top with LispWorks and if
so, how do I do it?
Thanks!
Glenn Ehrlich