Mercurial > dovecot > core-2.2
changeset 21605:bcd286fcdbad
lib-storage: Add mail.access_type
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Fri, 17 Feb 2017 19:29:03 +0200 |
parents | fb8ef6e2c2fe |
children | 6f2e7eb1ee90 |
files | src/lib-storage/index/index-search.c src/lib-storage/index/index-sort.c src/lib-storage/mail-storage.h |
diffstat | 3 files changed, 21 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/index-search.c Fri Feb 17 19:07:53 2017 +0200 +++ b/src/lib-storage/index/index-search.c Fri Feb 17 19:29:03 2017 +0200 @@ -1591,9 +1591,14 @@ mail_set_seq(mail, _ctx->seq); ctx->cur_mail = mail; + /* mail's access_type is SEARCH only while using it to process + the search query. afterwards the mail can still be accessed + for fetching. */ + ctx->cur_mail->access_type = MAIL_ACCESS_TYPE_SEARCH; T_BEGIN { match = search_match_next(ctx); } T_END; + ctx->cur_mail->access_type = MAIL_ACCESS_TYPE_DEFAULT; ctx->cur_mail = NULL; i_assert(imail->data.search_results == NULL);
--- a/src/lib-storage/index/index-sort.c Fri Feb 17 19:07:53 2017 +0200 +++ b/src/lib-storage/index/index-sort.c Fri Feb 17 19:29:03 2017 +0200 @@ -170,6 +170,7 @@ struct mail *mail) { enum mail_lookup_abort orig_abort = mail->lookup_abort; + enum mail_access_type orig_access_type = mail->access_type; bool prev_slow = mail->mail_stream_opened || mail->mail_metadata_accessed; @@ -177,9 +178,13 @@ if (program->slow_mails_left == 0) mail->lookup_abort = MAIL_LOOKUP_ABORT_NOT_IN_CACHE; + + mail->access_type = MAIL_ACCESS_TYPE_SORT; T_BEGIN { program->sort_list_add(program, mail); } T_END; + mail->access_type = orig_access_type; + if (!prev_slow && (mail->mail_stream_opened || mail->mail_metadata_accessed)) { i_assert(program->slow_mails_left > 0); @@ -308,6 +313,7 @@ program = i_new(struct mail_search_sort_program, 1); program->t = t; program->temp_mail = mail_alloc(t, 0, NULL); + program->temp_mail->access_type = MAIL_ACCESS_TYPE_SORT; program->slow_mails_left = program->t->box->storage->set->mail_sort_max_read_count;
--- a/src/lib-storage/mail-storage.h Fri Feb 17 19:07:53 2017 +0200 +++ b/src/lib-storage/mail-storage.h Fri Feb 17 19:29:03 2017 +0200 @@ -373,6 +373,14 @@ MAIL_LOOKUP_ABORT_NOT_IN_CACHE }; +enum mail_access_type { + MAIL_ACCESS_TYPE_DEFAULT = 0, + /* Mail is being used for searching */ + MAIL_ACCESS_TYPE_SEARCH, + /* Mail is being used for sorting results */ + MAIL_ACCESS_TYPE_SORT, +}; + struct mail { /* always set */ struct mailbox *box; @@ -394,6 +402,8 @@ MAIL_LOOKUP_ABORT_NOT_IN_CACHE, this can't become TRUE. */ bool mail_metadata_accessed:1; + enum mail_access_type access_type; + /* If the lookup is aborted, error is set to MAIL_ERROR_NOTPOSSIBLE */ enum mail_lookup_abort lookup_abort; };