diff --git a/src/lib-storage/index/index-mail.c b/src/lib-storage/index/index-mail.c index 05be89c1a6..5f4f8a43e9 100644 --- a/src/lib-storage/index/index-mail.c +++ b/src/lib-storage/index/index-mail.c @@ -456,7 +456,7 @@ bool index_mail_get_cached_virtual_size(struct index_mail *mail, uoff_t *size_r) /* see if we can get it from index */ mail_index_lookup_ext(_mail->transaction->view, _mail->seq, - mail->vsize_ext_id, &idata, &expunged); + _mail->box->mail_vsize_ext_id, &idata, &expunged); const uint32_t *vsize = idata; if (vsize != NULL && *vsize > 0) { @@ -489,7 +489,7 @@ bool index_mail_get_cached_virtual_size(struct index_mail *mail, uoff_t *size_r) data->virtual_size < (uint32_t)-1) { uint32_t vsize = data->virtual_size+1; mail_index_update_ext(_mail->transaction->itrans, _mail->seq, - mail->vsize_ext_id, &vsize, NULL); + _mail->box->mail_vsize_ext_id, &vsize, NULL); } return TRUE; @@ -876,7 +876,7 @@ static void index_mail_cache_sizes(struct index_mail *mail) extension for box virtual size exists */ - if ((mail_index_map_get_ext_idx(view->map, mail->vsize_ext_id, &idx) || + if ((mail_index_map_get_ext_idx(view->map, _mail->box->mail_vsize_ext_id, &idx) || mail_index_map_get_ext_idx(view->map, _mail->box->vsize_hdr_ext_id, &idx)) && (sizes[0] != (uoff_t)-1 && sizes[0] < (uint32_t)-1)) { @@ -887,7 +887,7 @@ static void index_mail_cache_sizes(struct index_mail *mail) vsize = sizes[0] + 1; sizes[0] = (uoff_t)-1; mail_index_update_ext(_mail->transaction->itrans, _mail->seq, - mail->vsize_ext_id, &vsize, NULL); + _mail->box->mail_vsize_ext_id, &vsize, NULL); } for (i = 0; i < N_ELEMENTS(size_fields); i++) { @@ -1540,9 +1540,6 @@ void index_mail_init(struct index_mail *mail, mail->mail.v = *t->box->mail_vfuncs; mail->mail.mail.box = t->box; mail->mail.mail.transaction = t; - mail->vsize_ext_id = mail_index_ext_register(t->box->index, "vsize", 0, - sizeof(uint32_t), - sizeof(uint32_t)); t->mail_ref_count++; mail->mail.data_pool = pool_alloconly_create("index_mail", 16384); mail->ibox = INDEX_STORAGE_CONTEXT(t->box); @@ -2208,15 +2205,15 @@ void index_mail_precache(struct mail *mail) } static void -index_mail_reset_vsize_ext(struct mail *mail, struct index_mail *imail) +index_mail_reset_vsize_ext(struct mail *mail) { unsigned int idx; uint32_t vsize = 0; struct mail_index_view *view = mail->transaction->view; - if (mail_index_map_get_ext_idx(view->map, imail->vsize_ext_id, + if (mail_index_map_get_ext_idx(view->map, mail->box->mail_vsize_ext_id, &idx)) { mail_index_update_ext(mail->transaction->itrans, mail->seq, - imail->vsize_ext_id, &vsize, NULL); + mail->box->mail_vsize_ext_id, &vsize, NULL); } } @@ -2236,14 +2233,14 @@ void index_mail_set_cache_corrupted(struct mail *mail, imail->data.physical_size = (uoff_t)-1; imail->data.virtual_size = (uoff_t)-1; imail->data.parts = NULL; - index_mail_reset_vsize_ext(mail, imail); + index_mail_reset_vsize_ext(mail); break; case MAIL_FETCH_VIRTUAL_SIZE: field_name = "virtual size"; imail->data.physical_size = (uoff_t)-1; imail->data.virtual_size = (uoff_t)-1; imail->data.parts = NULL; - index_mail_reset_vsize_ext(mail, imail); + index_mail_reset_vsize_ext(mail); break; case MAIL_FETCH_MESSAGE_PARTS: field_name = "MIME parts"; diff --git a/src/lib-storage/index/index-mail.h b/src/lib-storage/index/index-mail.h index 99b65dc587..7daf60837d 100644 --- a/src/lib-storage/index/index-mail.h +++ b/src/lib-storage/index/index-mail.h @@ -137,7 +137,6 @@ struct index_mail { struct index_mailbox_context *ibox; int pop3_state; - uint32_t vsize_ext_id; /* per-mail variables, here for performance reasons: */ uint32_t header_seq; diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index d55d7501f7..c3b91ddbf7 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -303,6 +303,9 @@ int index_storage_mailbox_open(struct mailbox *box, bool move_to_memory) box->box_last_rename_stamp_ext_id = mail_index_ext_register(box->index, "last-rename-stamp", sizeof(uint32_t), 0, sizeof(uint32_t)); + box->mail_vsize_ext_id = mail_index_ext_register(box->index, "vsize", 0, + sizeof(uint32_t), + sizeof(uint32_t)); box->opened = TRUE; diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 69bbf18da1..614663d0c3 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -363,6 +363,7 @@ struct mailbox { uint32_t pop3_uidl_hdr_ext_id; uint32_t box_name_hdr_ext_id; uint32_t box_last_rename_stamp_ext_id; + uint32_t mail_vsize_ext_id; /* MAIL_RECENT flags handling */ ARRAY_TYPE(seq_range) recent_flags;