]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
plugins/quota: Avoid calling quota_get_mail_size() twice in quota_try_alloc()
authorsergey.kitov <sergey.kitov@open-xchange.com>
Thu, 18 Aug 2022 14:28:27 +0000 (17:28 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 21 Sep 2022 12:41:34 +0000 (12:41 +0000)
src/plugins/quota/quota.c

index 675cedb6bc43f91cd91e505e044557e68538dac2..fd40710e20e8e5f663002164f3a5f8614237861c 100644 (file)
@@ -1325,6 +1325,14 @@ static int quota_get_mail_size(struct quota_transaction_context *ctx,
                return mail_get_physical_size(mail, size_r);
 }
 
+static void quota_alloc_with_size(struct quota_transaction_context *ctx,
+                                 uoff_t size)
+{
+       ctx->bytes_used += size;
+       ctx->bytes_ceil = ctx->bytes_ceil2;
+       ctx->count_used++;
+}
+
 enum quota_alloc_result quota_try_alloc(struct quota_transaction_context *ctx,
                                        struct mail *mail, const char **error_r)
 {
@@ -1365,7 +1373,7 @@ enum quota_alloc_result quota_try_alloc(struct quota_transaction_context *ctx,
           quota_alloc() or quota_free_bytes() was already used within the same
           transaction, but that doesn't normally happen. */
        ctx->auto_updating = FALSE;
-       quota_alloc(ctx, mail);
+       quota_alloc_with_size(ctx, size);
        return QUOTA_ALLOC_RESULT_OK;
 }
 
@@ -1448,15 +1456,13 @@ static enum quota_alloc_result quota_default_test_alloc(
 
 void quota_alloc(struct quota_transaction_context *ctx, struct mail *mail)
 {
-       uoff_t size;
+       uoff_t size = 0;
 
        if (!ctx->auto_updating) {
-               if (quota_get_mail_size(ctx, mail, &size) == 0)
-                       ctx->bytes_used += size;
+               (void)quota_get_mail_size(ctx, mail, &size);
        }
 
-       ctx->bytes_ceil = ctx->bytes_ceil2;
-       ctx->count_used++;
+       quota_alloc_with_size(ctx, size);
 }
 
 void quota_free_bytes(struct quota_transaction_context *ctx,