dovecot-2.0: mdbox: If one save fails, but others succeed, don't...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Jul 1 22:40:59 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/3bc1cef3ac4c
changeset: 11692:3bc1cef3ac4c
user: Timo Sirainen <tss at iki.fi>
date: Thu Jul 01 20:40:55 2010 +0100
description:
mdbox: If one save fails, but others succeed, don't assert-crash at commit.
diffstat:
src/lib-storage/index/dbox-multi/mdbox-map.c | 10 ++++++++++
src/lib-storage/index/dbox-multi/mdbox-map.h | 2 ++
src/lib-storage/index/dbox-multi/mdbox-save.c | 1 +
3 files changed, 13 insertions(+), 0 deletions(-)
diffs (43 lines):
diff -r 245cd41837ff -r 3bc1cef3ac4c src/lib-storage/index/dbox-multi/mdbox-map.c
--- a/src/lib-storage/index/dbox-multi/mdbox-map.c Thu Jul 01 20:01:01 2010 +0100
+++ b/src/lib-storage/index/dbox-multi/mdbox-map.c Thu Jul 01 20:40:55 2010 +0100
@@ -1070,6 +1070,16 @@
appends[count-1].size = cur_offset - appends[count-1].offset;
}
+void mdbox_map_append_abort(struct mdbox_map_append_context *ctx)
+{
+ struct mdbox_map_append *appends;
+ unsigned int count;
+
+ appends = array_get_modifiable(&ctx->appends, &count);
+ i_assert(count > 0 && appends[count-1].size == (uint32_t)-1);
+ array_delete(&ctx->appends, count-1, 1);
+}
+
static int mdbox_map_assign_file_ids(struct mdbox_map_append_context *ctx,
bool separate_transaction)
{
diff -r 245cd41837ff -r 3bc1cef3ac4c src/lib-storage/index/dbox-multi/mdbox-map.h
--- a/src/lib-storage/index/dbox-multi/mdbox-map.h Thu Jul 01 20:01:01 2010 +0100
+++ b/src/lib-storage/index/dbox-multi/mdbox-map.h Thu Jul 01 20:40:55 2010 +0100
@@ -101,6 +101,8 @@
struct ostream **output_r);
/* Finished saving the last mail. Saves the message size. */
void mdbox_map_append_finish(struct mdbox_map_append_context *ctx);
+/* Abort saving the last mail. */
+void mdbox_map_append_abort(struct mdbox_map_append_context *ctx);
/* Assign map UIDs to all appended msgs to multi-files. */
int mdbox_map_append_assign_map_uids(struct mdbox_map_append_context *ctx,
uint32_t *first_map_uid_r,
diff -r 245cd41837ff -r 3bc1cef3ac4c src/lib-storage/index/dbox-multi/mdbox-save.c
--- a/src/lib-storage/index/dbox-multi/mdbox-save.c Thu Jul 01 20:01:01 2010 +0100
+++ b/src/lib-storage/index/dbox-multi/mdbox-save.c Thu Jul 01 20:40:55 2010 +0100
@@ -218,6 +218,7 @@
i_stream_unref(&ctx->ctx.input);
if (ctx->ctx.failed) {
+ mdbox_map_append_abort(ctx->append_ctx);
array_delete(&ctx->mails, array_count(&ctx->mails) - 1, 1);
return -1;
}
More information about the dovecot-cvs
mailing list