From: Timo Sirainen Date: Wed, 7 Jul 2010 14:52:16 +0000 (+0100) Subject: mdbox: Storage rebuild changes weren't actually being committed to disk. X-Git-Tag: 2.0.rc2~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4fded1eec06aba9ce37887ac30619768760cd0d0;p=thirdparty%2Fdovecot%2Fcore.git mdbox: Storage rebuild changes weren't actually being committed to disk. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-map.c b/src/lib-storage/index/dbox-multi/mdbox-map.c index 9e262f5274..e82461c334 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-map.c +++ b/src/lib-storage/index/dbox-multi/mdbox-map.c @@ -474,6 +474,11 @@ void mdbox_map_atomic_set_failed(struct mdbox_map_atomic_context *atomic) atomic->success = FALSE; } +void mdbox_map_atomic_set_success(struct mdbox_map_atomic_context *atomic) +{ + atomic->success = TRUE; +} + int mdbox_map_atomic_finish(struct mdbox_map_atomic_context **_atomic) { struct mdbox_map_atomic_context *atomic = *_atomic; diff --git a/src/lib-storage/index/dbox-multi/mdbox-map.h b/src/lib-storage/index/dbox-multi/mdbox-map.h index c5500c7d7d..8abe03f6c3 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-map.h +++ b/src/lib-storage/index/dbox-multi/mdbox-map.h @@ -69,6 +69,10 @@ bool mdbox_map_atomic_is_locked(struct mdbox_map_atomic_context *atomic); /* When finish() is called, rollback the changes. If data was already written to map's transaction log, this desyncs the map and causes a rebuild */ void mdbox_map_atomic_set_failed(struct mdbox_map_atomic_context *atomic); +/* Mark this atomic as having succeeded. This is internally done if + transaction or append is committed within this atomic, but not when the + atomic is used standalone. */ +void mdbox_map_atomic_set_success(struct mdbox_map_atomic_context *atomic); /* Commit/rollback changes within this atomic context. */ int mdbox_map_atomic_finish(struct mdbox_map_atomic_context **atomic); diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c b/src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c index 693d751729..e086f81515 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c @@ -908,6 +908,7 @@ int mdbox_storage_rebuild(struct mdbox_storage *storage) atomic = mdbox_map_atomic_begin(storage->map); ret = mdbox_storage_rebuild_in_context(storage, atomic); + mdbox_map_atomic_set_success(atomic); if (mdbox_map_atomic_finish(&atomic) < 0) ret = -1; return ret; diff --git a/src/lib-storage/index/dbox-multi/mdbox-sync.c b/src/lib-storage/index/dbox-multi/mdbox-sync.c index c2f61ef0b1..57519f3243 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-sync.c +++ b/src/lib-storage/index/dbox-multi/mdbox-sync.c @@ -308,6 +308,8 @@ int mdbox_sync(struct mdbox_mailbox *mbox, enum mdbox_sync_flags flags) ret = mdbox_sync_begin(mbox, flags, atomic, &sync_ctx); if (ret == 0 && sync_ctx != NULL) ret = mdbox_sync_finish(&sync_ctx, TRUE); + if (ret == 0) + mdbox_map_atomic_set_success(atomic); if (mdbox_map_atomic_finish(&atomic) < 0) ret = -1; return ret;