[dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-sync.c, 1.13, 1.14 maildir-uidlist.c, 1.15, 1.16 maildir-uidlist.h, 1.5, 1.6

cras at procontrol.fi cras at procontrol.fi
Mon May 10 02:52:15 EEST 2004


Update of /home/cvs/dovecot/src/lib-storage/index/maildir
In directory talvi:/tmp/cvs-serv29899/lib-storage/index/maildir

Modified Files:
	maildir-sync.c maildir-uidlist.c maildir-uidlist.h 
Log Message:
syncing fixes



Index: maildir-sync.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-sync.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- maildir-sync.c	9 May 2004 23:06:27 -0000	1.13
+++ maildir-sync.c	9 May 2004 23:52:13 -0000	1.14
@@ -559,7 +559,8 @@
 				   is updated? shouldn't really happen.. */
 				mail_storage_set_critical(ibox->box.storage,
 					"Maildir sync: UID < next_uid "
-					"(%u < %u)", uid, hdr->next_uid);
+					"(%u < %u, file = %s)",
+					uid, hdr->next_uid, filename);
 				mail_index_mark_corrupted(ibox->index);
 				ret = -1;
 				break;
@@ -678,9 +679,10 @@
 	}
 
 	/* finish uidlist syncing, but keep it still locked */
-        maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx);
-	if (maildir_sync_index(ctx) < 0)
-		return -1;
+	if (maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx)) {
+		if (maildir_sync_index(ctx) < 0)
+			return -1;
+	}
 
 	ret = maildir_uidlist_sync_deinit(ctx->uidlist_sync_ctx);
         ctx->uidlist_sync_ctx = NULL;

Index: maildir-uidlist.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- maildir-uidlist.c	9 May 2004 23:32:44 -0000	1.15
+++ maildir-uidlist.c	9 May 2004 23:52:13 -0000	1.16
@@ -215,7 +215,7 @@
 
 	rec = p_new(uidlist->record_pool, struct maildir_uidlist_rec, 1);
 	rec->uid = uid;
-	rec->flags = flags;
+	rec->flags = flags | MAILDIR_UIDLIST_REC_FLAG_NONSYNCED;
 	rec->filename = p_strdup(uidlist->record_pool, line);
 	hash_insert(uidlist->files, rec->filename, rec);
 	buffer_append(uidlist->record_buf, &rec, sizeof(rec));
@@ -767,7 +767,7 @@
 	}
 }
 
-void maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx)
+int maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx)
 {
 	if (!ctx->partial) {
 		if (!ctx->failed && !ctx->locked)
@@ -777,9 +777,9 @@
 			maildir_uidlist_assign_uids(ctx->uidlist,
 						    ctx->first_new_pos);
 		}
-		maildir_uidlist_mark_all(ctx->uidlist, FALSE);
 	}
 	ctx->finished = TRUE;
+	return !ctx->locked;
 }
 
 int maildir_uidlist_sync_deinit(struct maildir_uidlist_sync_ctx *ctx)
@@ -792,6 +792,9 @@
 	if (ctx->new_files_count != 0 && !ctx->failed && !ctx->locked)
 		ret = maildir_uidlist_rewrite(ctx->uidlist);
 
+	if (ctx->partial)
+		maildir_uidlist_mark_all(ctx->uidlist, FALSE);
+
 	if (UIDLIST_IS_LOCKED(ctx->uidlist))
 		maildir_uidlist_unlock(ctx->uidlist);
 

Index: maildir-uidlist.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- maildir-uidlist.h	9 May 2004 23:06:27 -0000	1.5
+++ maildir-uidlist.h	9 May 2004 23:52:13 -0000	1.6
@@ -37,7 +37,8 @@
 int maildir_uidlist_sync_next(struct maildir_uidlist_sync_ctx *ctx,
 			      const char *filename,
 			      enum maildir_uidlist_rec_flag flags);
-void maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx);
+/* Returns 1 = ok, 0 = uidlist is locked, don't try syncing any further */
+int maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx);
 int maildir_uidlist_sync_deinit(struct maildir_uidlist_sync_ctx *ctx);
 
 /* List all maildir files. */



More information about the dovecot-cvs mailing list