[dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-save.c,
1.52, 1.53 maildir-transaction.c, 1.8, 1.9
cras at dovecot.org
cras at dovecot.org
Sat Jul 2 13:54:58 EEST 2005
Update of /var/lib/cvs/dovecot/src/lib-storage/index/maildir
In directory talvi:/tmp/cvs-serv31679
Modified Files:
maildir-save.c maildir-transaction.c
Log Message:
Saving messages crashed
Index: maildir-save.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-save.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -d -r1.52 -r1.53
--- maildir-save.c 30 Jun 2005 20:28:20 -0000 1.52
+++ maildir-save.c 2 Jul 2005 10:54:55 -0000 1.53
@@ -356,11 +356,6 @@
return -1;
}
- if (maildir_sync_index_finish(sync_ctx, TRUE) < 0) {
- maildir_save_commit_abort(ctx, sync_ctx, ctx->files);
- return -1;
- }
-
first_uid = maildir_uidlist_get_next_uid(ctx->mbox->uidlist);
mail_index_append_assign_uids(ctx->trans, first_uid, &last_uid);
@@ -371,6 +366,7 @@
ctx->uidlist_sync_ctx =
maildir_uidlist_sync_init(ctx->mbox->uidlist, TRUE);
+ ret = 0;
for (mf = ctx->files; mf != NULL; mf = mf->next) {
t_push();
dest = maildir_get_updated_filename(ctx, sync_ctx, mf);
@@ -379,15 +375,29 @@
if (maildir_file_move(ctx, mf->basename, dest) < 0 ||
maildir_uidlist_sync_next(ctx->uidlist_sync_ctx,
fname, flags) < 0) {
- (void)maildir_uidlist_sync_deinit(
- ctx->uidlist_sync_ctx);
maildir_save_commit_abort(ctx, sync_ctx, mf);
t_pop();
- return -1;
+ ret = -1;
+ break;
}
t_pop();
}
- return 0;
+
+ if (ret == 0) {
+ /* finish uidlist syncing, but keep it still locked */
+ maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx);
+ }
+
+ if (ret < 0) {
+ /* deinit only if we failed. otherwise save_commit_post()
+ does it. */
+ if (maildir_uidlist_sync_deinit(ctx->uidlist_sync_ctx) < 0)
+ ret = -1;
+ ctx->uidlist_sync_ctx = NULL;
+ }
+
+ maildir_sync_index_abort(sync_ctx);
+ return ret;
}
void maildir_transaction_save_commit_post(struct maildir_save_context *ctx)
Index: maildir-transaction.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-transaction.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- maildir-transaction.c 8 Apr 2005 13:13:47 -0000 1.8
+++ maildir-transaction.c 2 Jul 2005 10:54:55 -0000 1.9
@@ -38,7 +38,7 @@
save_ctx = t->save_ctx;
if (index_transaction_commit(_t) < 0)
- return -1;
+ ret = -1;
/* transaction is destroyed. */
More information about the dovecot-cvs
mailing list