Hi Gary,
Thanks for the nice description of how threading works.
Asynchronous signals tend not to carry much information; it's not clear that we could use them to implement IPC requests that asked another OS process to interrupt a specific thread. I'm not sure what kind of IPC mechanisms SWANK/SLIME already provide that might deal with the "OS process as a whole", but the lisp side of it could just involve a thread that listens for IPC requests over a socket that's created when SLIME first starts the lisp OS process. Or something.
(defvar *slime-control-socket* ... "created when SLIME starts the OS process")
This seems likely the way to go. With the "socket per thread" plan we already need a control channel so that a Lisp thread hitting the debugger can ask Emacs to open a connection (Emacs can't portably accept incoming ones). Hopefully we can kill two birds with one stone.
It's interesting trying to make sure that designs work with single-threaded, single-threaded+SERVE-EVENT, and multithreaded. In this case I think it's simple and we'll only use a control connection in the multithreaded case.
-Luke