Update of /project/cl-irc/cvsroot/cl-irc In directory common-lisp:/tmp/cvs-serv852
Modified Files: protocol.lisp Log Message: Replace invalidate-me condition machinery meant to catch EPIPE by code which prevents the EPIPE (and the associated error).
--- /project/cl-irc/cvsroot/cl-irc/protocol.lisp 2005/09/25 14:55:02 1.25 +++ /project/cl-irc/cvsroot/cl-irc/protocol.lisp 2006/01/23 23:23:49 1.26 @@ -1,4 +1,4 @@ -;;;; $Id: protocol.lisp,v 1.25 2005/09/25 14:55:02 bmastenbrook Exp $ +;;;; $Id: protocol.lisp,v 1.26 2006/01/23 23:23:49 ehuelsmann Exp $ ;;;; $Source: /project/cl-irc/cvsroot/cl-irc/protocol.lisp,v $
;;;; See LICENSE for licensing information. @@ -241,26 +241,13 @@ (and (streamp stream) (open-stream-p stream))))
-(define-condition invalidate-me (condition) - ((stream :initarg :stream - :reader invalidate-me-stream) - (condition :initarg :condition - :reader invalidate-me-condition))) - (defmethod read-message ((connection connection)) - (let ((read-more-p t)) - (handler-case - (progn - (when (and (connectedp connection) read-more-p) - (let ((message (read-irc-message connection))) - (when *debug-p* - (format *debug-stream* "~A" (describe message))) - (irc-message-event message) - message))) ; needed because of the "loop while" in read-message-loop - (stream-error (c) (setf read-more-p nil) - (signal 'invalidate-me :stream - (server-stream connection) - :condition c))))) + (when (connectedp connection) + (let ((message (read-irc-message connection))) + (when *debug-p* + (format *debug-stream* "~A" (describe message))) + (irc-message-event message) + message))) ; needed because of the "loop while" in read-message-loop
(defvar *process-count* 0)
@@ -284,14 +271,15 @@ (server-stream connection)) :input (lambda (fd) (declare (ignore fd)) - (handler-case + (if (listen (server-stream connection)) (read-message connection) - (invalidate-me (c) - (sb-sys:invalidate-descriptor - (sb-sys:fd-stream-fd - (invalidate-me-stream c))) - (format t "Socket closed: ~A~%" - (invalidate-me-condition c))))))))) + ;; select() returns with no + ;; available data if the stream + ;; has been closed on the other + ;; end (EPIPE) + (sb-sys:invalidate-descriptor + (sb-sys:fd-stream-fd + (server-stream connection)))))))))
(defun stop-background-message-handler (process) "Stops a background message handler process returned by the start function."