Clear up nnml expiry target performance regressions.
authorLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Thu, 16 Dec 2010 17:58:19 +0000 (18:58 +0100)
committerLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Thu, 16 Dec 2010 17:58:19 +0000 (18:58 +0100)
Fix previous fix by having nnfolder save all its buffers
explicitly.

lisp/ChangeLog
lisp/nnfolder.el
lisp/nnmail.el

index 9036447..bac3f9e 100644 (file)
@@ -1,3 +1,14 @@
+2010-12-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnfolder.el (nnfolder-save-all-buffers): Refactor out into its own
+       function.
+       (nnfolder-request-expire-articles): Save all the buffers after doing
+       expiry.
+
+       * nnmail.el (nnmail-expiry-target-group): Revert the "all articles are
+       the last article", since that led to serious performance regressions
+       when expiring nnml groups.
+
 2010-12-16  Andrew Cohen  <cohen@andy.bu.edu>
 
        * nnir.el: Improve customizations.
index 5de8653..f0a21c5 100644 (file)
@@ -322,20 +322,20 @@ the group.  Then the marks file will be regenerated properly by Gnus.")
   (when nnfolder-get-new-mail
     (nnfolder-possibly-change-group group server)
     (nnmail-get-new-mail
-     'nnfolder
-     (lambda ()
-       (let ((bufs nnfolder-buffer-alist))
-        (save-excursion
-          (while bufs
-            (if (not (gnus-buffer-live-p (nth 1 (car bufs))))
-                (setq nnfolder-buffer-alist
-                      (delq (car bufs) nnfolder-buffer-alist))
-              (set-buffer (nth 1 (car bufs)))
-              (nnfolder-save-buffer)
-              (kill-buffer (current-buffer)))
-            (setq bufs (cdr bufs))))))
-     nnfolder-directory
-     group)))
+     'nnfolder 'nnfolder-save-all-buffers
+     nnfolder-directory group)))
+
+(defun nnfolder-save-all-buffers ()
+  (let ((bufs nnfolder-buffer-alist))
+    (save-excursion
+      (while bufs
+       (if (not (gnus-buffer-live-p (nth 1 (car bufs))))
+           (setq nnfolder-buffer-alist
+                 (delq (car bufs) nnfolder-buffer-alist))
+         (set-buffer (nth 1 (car bufs)))
+         (nnfolder-save-buffer)
+         (kill-buffer (current-buffer)))
+       (setq bufs (cdr bufs))))))
 
 ;; Don't close the buffer if we're not shutting down the server.  This way,
 ;; we can keep the buffer in the group buffer cache, and not have to grovel
@@ -488,7 +488,8 @@ the group.  Then the marks file will be regenerated properly by Gnus.")
       (nnfolder-save-buffer)
       (nnfolder-adjust-min-active newsgroup)
       (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
-      (gnus-sorted-difference articles (nreverse deleted-articles)))))
+      (gnus-sorted-difference articles (nreverse deleted-articles)))
+    (nnfolder-save-all-buffers)))
 
 (deffoo nnfolder-request-move-article (article group server accept-form
                                               &optional last move-is-internal)
index 06b464c..c86e96b 100644 (file)
@@ -1915,7 +1915,7 @@ If TIME is nil, then return the cutoff time for oldness instead."
     (unless (eq target 'delete)
       (when (or (gnus-request-group target)
                (gnus-request-create-group target))
-       (let ((group-art (gnus-request-accept-article target nil t t)))
+       (let ((group-art (gnus-request-accept-article target nil nil t)))
          (when (and (consp group-art)
                     (cdr group-art))
            (gnus-group-mark-article-read target (cdr group-art))))))))