}
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;
}
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++) {
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);
} 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)