From: Timo Sirainen Date: Mon, 29 Oct 2012 11:01:37 +0000 (+0200) Subject: lib-storage: Make sure mailbox was synced at least once when getting status/metadata. X-Git-Tag: 2.2.alpha1~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a81d416d2957bf7018fa86f1747364dfd89bcd10;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Make sure mailbox was synced at least once when getting status/metadata. --- diff --git a/src/lib-storage/index/index-status.c b/src/lib-storage/index/index-status.c index 7a7a63ccae..0cb06fac91 100644 --- a/src/lib-storage/index/index-status.c +++ b/src/lib-storage/index/index-status.c @@ -36,6 +36,8 @@ int index_storage_get_status(struct mailbox *box, if (!box->opened) { if (mailbox_open(box) < 0) return -1; + } + if (!box->synced) { if (mailbox_sync(box, 0) < 0) return -1; } @@ -357,6 +359,10 @@ int index_mailbox_get_metadata(struct mailbox *box, if (mailbox_open(box) < 0) return -1; } + if (!box->synced && (items & MAILBOX_METADATA_SYNC_ITEMS) != 0) { + if (mailbox_sync(box, 0) < 0) + return -1; + } if ((items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0) { if (get_metadata_virtual_size(box, metadata_r) < 0) diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index eb4530722f..9cadbf0d7c 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -85,6 +85,9 @@ enum mailbox_metadata_items { MAILBOX_METADATA_CACHE_FIELDS = 0x04, MAILBOX_METADATA_PRECACHE_FIELDS = 0x08, MAILBOX_METADATA_BACKEND_NAMESPACE = 0x10 + /* metadata items that require mailbox to be synced at least once. */ +#define MAILBOX_METADATA_SYNC_ITEMS \ + (MAILBOX_METADATA_GUID | MAILBOX_METADATA_VIRTUAL_SIZE) }; enum mailbox_search_result_flags {