Recently sbcl switched to using pthreads if it is built with thread support. Sbcl cvs head has a thread-os-thread-slot instead of thread-pid-slot. Its value is a pid in non-threaded builds, and a pthread_t otherwise. Now, pthread_t is an unsigned long on linux/nptl and the high bits are really used so communication with emacs breaks down: the id of the startup thread on my system does not fit into an elisp integer:
1098623904 => 24882080
The patch below adds a mising a thread state and works with os-thread instead of pid. However, the (unsigned-byte 32) communication problem is still there.
Index: swank-sbcl.lisp =================================================================== RCS file: /project/slime/cvsroot/slime/swank-sbcl.lisp,v retrieving revision 1.134 diff -u -r1.134 swank-sbcl.lisp --- swank-sbcl.lisp 11 Jun 2005 16:22:23 -0000 1.134 +++ swank-sbcl.lisp 20 Jun 2005 13:33:38 -0000 @@ -1117,7 +1117,8 @@ (0 :running) (1 :stopping) (2 :stopped) - (3 :dead))) + (3 :dead) + (4 :starting)))
(defimplementation thread-status (thread) (string (%thread-state thread))) @@ -1136,8 +1137,9 @@ (let ((pids (sb-sys:without-gcing (sb-thread::mapcar-threads (lambda (sap) - (sb-sys:sap-ref-32 sap (* sb-vm:n-word-bytes - sb-vm::thread-pid-slot))))))) + (sb-sys:sap-ref-32 sap + (* sb-vm:n-word-bytes + sb-vm::thread-os-thread-slot))))))) (remove :dead pids :key #'%thread-state)))
(defimplementation interrupt-thread (thread fn)
Cheers, Gábor Melis