]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Make sure mailbox was synced at least once when getting status/metadata.
authorTimo Sirainen <tss@iki.fi>
Mon, 29 Oct 2012 11:01:37 +0000 (13:01 +0200)
committerTimo Sirainen <tss@iki.fi>
Mon, 29 Oct 2012 11:01:37 +0000 (13:01 +0200)
src/lib-storage/index/index-status.c
src/lib-storage/mail-storage.h

index 7a7a63ccae42a3223a72137865c406e732493884..0cb06fac91eeb77b1ca519e1d273b9b31f86d9b7 100644 (file)
@@ -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)
index eb4530722f11ec4a8ec2970a0b207503ffaf0c88..9cadbf0d7cdb793b83f073a6ad1e46b30b20cd84 100644 (file)
@@ -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 {