r8655: add timeouts for functions that did not return as well as a handler-case for...
authorKevin M. Rosenberg <kevin@rosenberg.net>
Fri, 13 Feb 2004 18:19:35 +0000 (18:19 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Fri, 13 Feb 2004 18:19:35 +0000 (18:19 +0000)
debian/changelog
logger.lisp

index c85220d0c76ec80933c2ac808164f35d47cb6404..617f72d5bcbf8ed06f68fbe1614c6f5370622e08 100644 (file)
@@ -1,3 +1,10 @@
+cl-irc-logger (0.8.1-1) unstable; urgency=low
+
+  * Add timeouts to some functions which may not return when the logger
+  is disconnected.
+
+ -- Kevin M. Rosenberg <kmr@debian.org>  Fri, 13 Feb 2004 11:18:53 -0700
+
 cl-irc-logger (0.8.0-1) unstable; urgency=low
 
   * Extensive code cleanup
index deb4ba5c8f9f2488de3ec32494d1b14a37cbbf3a..3bb165f1560f7145d07c48cada914db38b582331 100644 (file)
     *standard-output*))
 
 (defun add-log-entry (stream fmt &rest args)
-  (format-date-time (get-universal-time) :stream stream)
-  (write-char #\space stream)
-  (apply #'format stream fmt args)
-  (write-char #\newline stream)
-  (force-output stream))
+  (handler-case 
+      (progn
+       (format-date-time (get-universal-time) :stream stream)
+       (write-char #\space stream)
+       (apply #'format stream fmt args)
+       (write-char #\newline stream)
+       (force-output stream))
+    (error (e)
+     (warn "Error ~A when trying to add-log-entry '~A'." e
+          (apply #'format nil fmt args)))))
 
 (defun add-private-log-entry (logger fmt &rest args)
   (apply #'add-log-entry (get-private-log-stream logger) fmt args))
 (defun is-connected (logger)
   (%is-connected logger))
 
+(defparameter *timeout* 60)
+
 (defun is-connected (logger)
   #-allegro (%is-connected logger)
-  #+allegro (mp:with-timeout (60 nil)
+  #+allegro (mp:with-timeout (*timeout* nil)
              (%is-connected logger)))
 
+(defun quit-maybe-timeout (connection msg)
+  #-allegro (quit connection msg)
+  #+allegro (mp:with-timeout (*timeout* nil)
+             (quit connection msg)))
+
 (defun %is-connected (logger)
   (when (ignore-errors (ping (connection logger) (server logger)))
     (dotimes (i 20)
     
     (log-disconnection logger)
     (when (connection logger)
-      (ignore-errors (quit (connection logger) "Client terminated by server"))
+      (ignore-errors (quit-maybe-timeout (connection logger) "Client terminated by server"))
       (setf *recon-nick* (nickname logger)
            *recon-server* (server logger)
            *recon-username* (username logger)