]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dbox: Cleaning wasn't actually expunging records from map index.
authorTimo Sirainen <tss@iki.fi>
Mon, 23 Mar 2009 21:02:00 +0000 (17:02 -0400)
committerTimo Sirainen <tss@iki.fi>
Mon, 23 Mar 2009 21:02:00 +0000 (17:02 -0400)
--HG--
branch : HEAD

src/lib-storage/index/dbox/dbox-map.c
src/lib-storage/index/dbox/dbox-map.h
src/lib-storage/index/dbox/dbox-sync-file.c

index a3c88946f5964bb2d54d4613570818f36c83e642..7a77d0c37233b176c8e2b3444ab654fe79327457 100644 (file)
@@ -256,14 +256,18 @@ const ARRAY_TYPE(seq_range) *dbox_map_get_zero_ref_files(struct dbox_map *map)
 }
 
 struct dbox_map_transaction_context *
-dbox_map_transaction_begin(struct dbox_map *map)
+dbox_map_transaction_begin(struct dbox_map *map, bool external)
 {
        struct dbox_map_transaction_context *ctx;
+       enum mail_index_transaction_flags flags =
+               MAIL_INDEX_TRANSACTION_FLAG_FSYNC;
+
+       if (external)
+               flags |= MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL;
 
        ctx = i_new(struct dbox_map_transaction_context, 1);
        ctx->map = map;
-       ctx->trans = mail_index_transaction_begin(map->view,
-                                       MAIL_INDEX_TRANSACTION_FLAG_FSYNC);
+       ctx->trans = mail_index_transaction_begin(map->view, flags);
        return ctx;
 }
 
@@ -380,7 +384,7 @@ int dbox_map_remove_file_id(struct dbox_map *map, uint32_t file_id)
                return -1;
 
        /* we need a per-file transaction, otherwise we can't refresh the map */
-       map_trans = dbox_map_transaction_begin(map);
+       map_trans = dbox_map_transaction_begin(map, TRUE);
 
        hdr = mail_index_get_header(map->view);
        for (seq = 1; seq <= hdr->messages_count; seq++) {
index 8147ac117e357322ea3eaff08ba9a972a0e20915..1069f835482fcba74e3986b7357fc56b7a28c65e 100644 (file)
@@ -43,7 +43,7 @@ int dbox_map_get_file_msgs(struct dbox_map *map, uint32_t file_id,
                           ARRAY_TYPE(dbox_map_file_msg) *recs);
 
 struct dbox_map_transaction_context *
-dbox_map_transaction_begin(struct dbox_map *map);
+dbox_map_transaction_begin(struct dbox_map *map, bool external);
 int dbox_map_transaction_commit(struct dbox_map_transaction_context **ctx);
 void dbox_map_transaction_rollback(struct dbox_map_transaction_context **ctx);
 
index 1857ee5f6d409de394efe4ad2259c3f13f47d3b0..b03d6b6936a59a42a90685a31b25655b8a227d01 100644 (file)
@@ -310,7 +310,8 @@ int dbox_sync_file(struct dbox_sync_context *ctx,
        } else {
                if (ctx->map_trans == NULL) {
                        ctx->map_trans =
-                               dbox_map_transaction_begin(mbox->storage->map);
+                               dbox_map_transaction_begin(mbox->storage->map,
+                                                          FALSE);
                }
                if (dbox_map_update_refcounts(ctx->map_trans,
                                              &entry->expunge_map_uids, -1) < 0)