Author: ehuelsmann Date: Mon Mar 9 22:32:32 2009 New Revision: 212
Log: Install sensible recovery routines for NO-SUCH-REPLY in the default message loop handlers: use the continue restart.
Modified: trunk/protocol.lisp
Modified: trunk/protocol.lisp ============================================================================== --- trunk/protocol.lisp (original) +++ trunk/protocol.lisp Mon Mar 9 22:32:32 2009 @@ -311,7 +311,14 @@ (flet ((select-handler (fd) (declare (ignore fd)) (if (listen (network-stream connection)) - (read-message connection) + (handler-bind + ;; install sensible recovery: nobody can wrap the + ;; handler... + ((no-such-reply + #'(lambda (c) + (declare (ignore c)) + (invoke-restart 'continue)))) + (read-message connection)) ;; select() returns with no ;; available data if the stream ;; has been closed on the other @@ -324,7 +331,14 @@ :input #'select-handler))
#-(and sbcl (not sb-thread)) - (flet ((do-loop () (read-message-loop connection))) + (flet ((do-loop () + (loop + (handler-bind + ((no-such-reply + #'(lambda (c) + (declare (ignore c)) + (invoke-restart 'continue)))) + (read-message-loop connection))))) (let ((name (format nil "irc-hander-~D" (incf *process-count*)))) (start-process #'do-loop name))))