Currently, we use NIL on ECL because on one hand while it has threads, some parts are not yet thread-safe, and on the other hand, I do not fully understand Slime's :fd-handler architecture.
:FD-HANDLER seems to be tied to an I/O-implies-serve-event architecture like SBCL (and CMUCL?) have. OTOH, I just took a courtesy look at WAIT-FOR-INPUT in swank-cmucl and see *INTERRUPT-QUEUED-HANDLER*. What's the purpose of that? Why does WAIT-FOR-INPUT write to that pipe? :-)
ECL does have a select()-based serve-event, but it's not implicitly called. Where in the backend should it call serve-event?
The problem with NIL is that if ECL was built with threads enabled, it executes the SIGINT handler function inside a new thread. But we actually want to interrupt the REPL thread -- however SIGNAL-INTERRUPT just ignores its thread argument in case :SPAWN is not used. So I do not see an obvious way out.
That said, the problem won't be solved by implementing :FD-HANDLER for ECL either.
Thoughts?
-T.