[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