From: Timo Sirainen Date: Mon, 29 Nov 2021 17:39:22 +0000 (+0100) Subject: lib-storage: Add and use mail_metadata_access_start() X-Git-Tag: 2.3.18~55 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=13fd3c32565fc4516a904a5e0c44f23c0a656832;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add and use mail_metadata_access_start() --- diff --git a/src/lib-storage/index/maildir/maildir-mail.c b/src/lib-storage/index/maildir/maildir-mail.c index bdc8adf4fe..c3abbd3c6d 100644 --- a/src/lib-storage/index/maildir/maildir-mail.c +++ b/src/lib-storage/index/maildir/maildir-mail.c @@ -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) { diff --git a/src/lib-storage/index/raw/raw-mail.c b/src/lib-storage/index/raw/raw-mail.c index b388023a23..72d3688b78 100644 --- a/src/lib-storage/index/raw/raw-mail.c +++ b/src/lib-storage/index/raw/raw-mail.c @@ -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) { diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 32369b0c3d..63af167bf7 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -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); diff --git a/src/lib-storage/mail.c b/src/lib-storage/mail.c index 4ae559cdb5..5a6b5dfd47 100644 --- a/src/lib-storage/mail.c +++ b/src/lib-storage/mail.c @@ -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 =