[exim-cvs] Don't disable quota when maildirsize lost to race…

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Exim Git Commits Mailing List
Date:  
À: exim-cvs
Sujet: [exim-cvs] Don't disable quota when maildirsize lost to races.
Gitweb: http://git.exim.org/exim.git/commitdiff/554e333ebbe0552b61604cdf8fec77f507a3ab9b
Commit:     554e333ebbe0552b61604cdf8fec77f507a3ab9b
Parent:     2e64baa9d155c1a657ba43cbe0f9bd4846621b36
Author:     Phil Pennock <pdp@???>
AuthorDate: Mon Feb 21 22:17:13 2011 -0500
Committer:  Phil Pennock <pdp@???>
CommitDate: Mon Feb 21 22:17:13 2011 -0500


    Don't disable quota when maildirsize lost to races.


    When maildir_ensure_sizefile() returns -2, we still have size
    information, so we can still use that.  Don't disable quota.  As a
    result, do refrain from potentially calling close(-2).


    Fixes bug 1086
---
 src/src/transports/appendfile.c |   19 +++++++------------
 1 files changed, 7 insertions(+), 12 deletions(-)


diff --git a/src/src/transports/appendfile.c b/src/src/transports/appendfile.c
index e5ab657..39dd4f8 100644
--- a/src/src/transports/appendfile.c
+++ b/src/src/transports/appendfile.c
@@ -2419,18 +2419,12 @@ else
           "%s/maildirsize", check_path);
         return FALSE;
         }
-      else if (maildirsize_fd == -2)
-        {
-        DEBUG(D_transport) debug_printf("disabling quota check because of "
-          "races updating %s/maildirsize", check_path);
-        disable_quota = TRUE;
-        }
+      /* can also return -2, which means that the file was removed because of
+      raciness; but in this case, the size & filecount will still have been
+      updated. */


-      if (maildirsize_fd >= 0)
-        {
-        if (mailbox_size < 0) mailbox_size = size;
-        if (mailbox_filecount < 0) mailbox_filecount = filecount;
-        }
+      if (mailbox_size < 0) mailbox_size = size;
+      if (mailbox_filecount < 0) mailbox_filecount = filecount;
       }


     /* No quota enforcement; ensure file does *not* exist; calculate size if
@@ -2927,7 +2921,8 @@ if (!disable_quota)
   if (yield == OK && maildirsize_fd >= 0)
     maildir_record_length(maildirsize_fd, message_size);
   maildir_save_errno = errno;    /* Preserve errno while closing the file */
-  (void)close(maildirsize_fd);
+  if (maildirsize_fd >= 0)
+    (void)close(maildirsize_fd);
   errno = maildir_save_errno;
   }
 #endif  /* SUPPORT_MAILDIR */