}
static int
-index_mailbox_vsize_hdr_add_missing(struct mailbox_vsize_update *update)
+index_mailbox_vsize_hdr_add_missing(struct mailbox_vsize_update *update,
+ bool require_result)
{
struct mailbox_index_vsize *vsize_hdr = &update->vsize_hdr;
struct mailbox_transaction_context *trans;
trans = mailbox_transaction_begin(update->box, 0);
search_ctx = mailbox_search_init(trans, search_args, NULL,
MAIL_FETCH_VIRTUAL_SIZE, NULL);
- mails_left = update->box->storage->set->mail_vsize_bg_after_count == 0 ?
- UINT_MAX : update->box->storage->set->mail_vsize_bg_after_count;
+ if (!require_result)
+ mails_left = 0;
+ else if (update->box->storage->set->mail_vsize_bg_after_count == 0)
+ mails_left = UINT_MAX;
+ else
+ mails_left = update->box->storage->set->mail_vsize_bg_after_count;
+
while (mailbox_search_next(search_ctx, &mail)) {
if (mails_left == UINT_MAX) {
/* we want to build the full vsize here */
if (mails_left == 0) {
mail_storage_set_error(update->box->storage, MAIL_ERROR_INUSE,
"Finishing vsize calculation on background");
- update->finish_in_background = TRUE;
+ if (require_result)
+ update->finish_in_background = TRUE;
break;
}
mails_left--;
anyway internally even though we won't be saving the result. */
(void)index_mailbox_vsize_update_wait_lock(update);
- ret = index_mailbox_vsize_hdr_add_missing(update);
+ ret = index_mailbox_vsize_hdr_add_missing(update, TRUE);
metadata_r->virtual_size = update->vsize_hdr.vsize;
index_mailbox_vsize_update_deinit(&update);
return ret;
if (update->vsize_hdr.highest_uid + 1 != status.uidnext &&
index_mailbox_vsize_want_updates(update) &&
index_mailbox_vsize_update_try_lock(update))
- (void)index_mailbox_vsize_hdr_add_missing(update);
+ (void)index_mailbox_vsize_hdr_add_missing(update, FALSE);
index_mailbox_vsize_update_deinit(&update);
}