[slime-devel] Running tasks when slime isn't connected
Shaun Morris
slime-devel at shaunmorris.com
Mon Apr 10 19:37:47 UTC 2006
I'm writing an application that needs to continue to process data, even
when slime is not connected.
If I had threads, I might use them, but I'm using CLISP.
My solution to this problem is to insert a loop that checks the status
of the socket, and processes a chunk of data, until the socket is ready,
before accepting the connection.
I'd really like something like this committed, so I don't have to
maintain my own version of slime forever, but I'm open to any other
solutions as well.
My changes follow.
Thanks,
Shaun
-------------------------------------------------------------------------
swank-backend.lisp:
(definterface connection-available-p (socket)
"Returns t if (accept-connection socket) will proceed without
blocking.")
swank.lisp:
(defvar *disconnected-idle-hook* '()
"This hook is run repeatedly, whenever a client is not connected.")
(defun serve-connection (socket style dont-close external-format)
(loop until (or (null *disconnected-idle-hook*)
(connection-available-p socket))
do (run-hook *disconnected-idle-hook*))
(let ((client (accept-authenticated-connection
socket :external-format external-format)))
(unless dont-close
(close-socket socket))
(let ((connection (create-connection client style external-format)))
(run-hook *new-connection-hook* connection)
(push connection *connections*)
(serve-requests connection))))
swank-clisp.lisp:
(defimplementation connection-available-p (socket)
(socket:socket-wait socket 0))
More information about the slime-devel
mailing list