[Prev][Next][Index][Thread]

Re: Hypermail question



I'm sorry to bother you. It's corrected now works good!
It was a update-mail-archive method of mail-archive.lisp(below loop). I add
null checking as in initialize-mail-archive.

- Jong-won Choi

(defmethod update-mail-archive ((mail-archive mail-archive) &optional recache-p)
  (with-slots (lock url pathname length-in-bytes size) mail-archive
    (with-lock-held (lock :write "Update Mail Archive")
      (let ((new-length (file-length-in-bytes pathname))
            (old-length (or length-in-bytes 0))
            (old-size (or size 0)))
        (cond ;; lost bits better fully recompute
          ((or recache-p (< new-length old-length))
           (flet ((init-archive (url file-stream)
                    (declare (ignore url))
                    (initialize-mail-archive mail-archive file-stream)))
             (declare (dynamic-extent #'init-archive))
             (apply-mail-archive url pathname #'init-archive)))
          ;; incremental addition on the end of the mail file.
          (t (with-direct-access-open-file (file-stream pathname :direction :input)
               (loop initially (set-up-input-buffer file-stream old-length new-length)
                     with more-messages-p = t and msg and count = (1+ old-size) and reverse-messages
                     with start = (ma-start-time mail-archive)
                     with end = (ma-end-time mail-archive)
                     do (multiple-value-setq (msg more-messages-p)
                          (create-message mail-archive file-stream count))
                     when msg
                       collect msg into messages
                       and do (push msg reverse-messages)
                              (incf count)
                              (cond-every
;;; Add null check
                                ((or (null start) (msg-before-p msg start)
				 (setq start (or (msg-time msg) start))))
;;; Add null check
                                ((or (null end) (msg-after-p msg end))
				 (setq end (or (msg-time msg) end))))
                     while more-messages-p
                     finally (setf (ma-messages mail-archive) (nconc (ma-messages mail-archive) messages)
                                   (ma-reverse-messages mail-archive) (nconc reverse-messages (ma-reverse-messages mail-archive))
                                   (ma-size mail-archive) (1- count)
                                   (ma-length-in-bytes mail-archive) new-length
                                   (ma-start-time mail-archive) start
                                   (ma-end-time mail-archive) end
                                   (ma-cache-time mail-archive) (get-universal-time))))))
        mail-archive))))


References: