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