]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add and use mail_metadata_access_start()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 29 Nov 2021 17:39:22 +0000 (18:39 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Tue, 21 Dec 2021 10:06:58 +0000 (10:06 +0000)
src/lib-storage/index/maildir/maildir-mail.c
src/lib-storage/index/raw/raw-mail.c
src/lib-storage/mail-storage-private.h
src/lib-storage/mail.c

index bdc8adf4fe692e298c7d16e381a213fe3f9c7d33..c3abbd3c6d8230b423ad49b405d2f87b9ae0fafe 100644 (file)
@@ -110,11 +110,8 @@ static int maildir_mail_stat(struct mail *mail, struct stat *st_r)
        const char *path;
        int fd, ret;
 
-       if (mail->lookup_abort >= MAIL_LOOKUP_ABORT_NOT_IN_CACHE) {
-               mail_set_aborted(mail);
+       if (!mail_metadata_access_start(mail))
                return -1;
-       }
-       mail->mail_metadata_accessed = TRUE;
 
        if (imail->data.access_part != 0 &&
            imail->data.stream == NULL) {
index b388023a234e870e374dcfea31e425ff1e4bd5ba..72d3688b782b9c0fb19bffc4975d8d18454b36be 100644 (file)
@@ -14,11 +14,8 @@ static int raw_mail_stat(struct mail *mail)
        struct raw_mailbox *mbox = RAW_MAILBOX(mail->box);
        const struct stat *st;
 
-       if (mail->lookup_abort >= MAIL_LOOKUP_ABORT_NOT_IN_CACHE) {
-               mail_set_aborted(mail);
+       if (!mail_metadata_access_start(mail))
                return -1;
-       }
-       mail->mail_metadata_accessed = TRUE;
 
        mail->transaction->stats.fstat_lookup_count++;
        if (i_stream_stat(mail->box->input, TRUE, &st) < 0) {
index 32369b0c3dfc09543edad04974fbbec3bb4bbd73..63af167bf7bb6d12c4baeee302d9605444dddfb5 100644 (file)
@@ -830,6 +830,9 @@ int mail_set_attachment_keywords(struct mail *mail);
 /* Attempt to start accessing the mail stream. Returns TRUE is ok, FALSE if
    prevented by mail->lookup_abort. */
 bool mail_stream_access_start(struct mail *mail);
+/* Attempt to start accessing the mail metadata. Returns TRUE is ok, FALSE if
+   prevented by mail->lookup_abort. */
+bool mail_metadata_access_start(struct mail *mail);
 /* Emit mail opened events */
 void mail_opened_event(struct mail *mail);
 
index 4ae559cdb5926259f70c7839d697ca80c0b2aec2..5a6b5dfd47b1efd8fd3667af795e7c3e5669cf4b 100644 (file)
@@ -649,6 +649,16 @@ bool mail_stream_access_start(struct mail *mail)
        return TRUE;
 }
 
+bool mail_metadata_access_start(struct mail *mail)
+{
+       if (mail->lookup_abort >= MAIL_LOOKUP_ABORT_NOT_IN_CACHE) {
+               mail_set_aborted(mail);
+               return FALSE;
+       }
+       mail->mail_metadata_accessed = TRUE;
+       return TRUE;
+}
+
 void mail_opened_event(struct mail *mail)
 {
        struct mail_private *pmail =