[dovecot-cvs] dovecot/src/lib-storage/index index-sync.c,1.33,1.34

cras at procontrol.fi cras at procontrol.fi
Sun May 23 04:58:34 EEST 2004


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

Modified Files:
	index-sync.c 
Log Message:
mbox syncing fixes



Index: index-sync.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/index-sync.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- a/index-sync.c	22 May 2004 21:30:42 -0000	1.33
+++ b/index-sync.c	23 May 2004 01:58:32 -0000	1.34
@@ -15,8 +15,9 @@
 	size_t i, expunges_count;
 	void *sc_context;
 	enum mail_index_sync_type sync_mask;
-	uint32_t seq, seq1, seq2, messages_count, recent_count;
-	int ret, appends;
+	uint32_t seq, seq1, seq2;
+	uint32_t messages_count, new_messages_count, recent_count;
+	int ret;
 
 	sync_mask = MAIL_INDEX_SYNC_MASK_ALL;
 	if ((flags & MAILBOX_SYNC_FLAG_NO_EXPUNGES) != 0)
@@ -37,15 +38,11 @@
 
 	sc = ibox->storage->callbacks;
 	sc_context = ibox->storage->callback_context;
-	appends = FALSE;
-
-	messages_count = mail_index_view_get_message_count(ibox->view);
 
 	memset(&full_flags, 0, sizeof(full_flags));
 	while ((ret = mail_index_view_sync_next(ctx, &sync)) > 0) {
 		switch (sync.type) {
 		case MAIL_INDEX_SYNC_TYPE_APPEND:
-			appends = TRUE;
 			break;
 		case MAIL_INDEX_SYNC_TYPE_EXPUNGE:
 			/* later */
@@ -82,20 +79,25 @@
 	if (ret < 0)
 		mail_storage_set_index_error(ibox);
 
+	messages_count = new_messages_count =
+		mail_index_view_get_message_count(ibox->view);
+
 	if (sc->expunge != NULL) {
 		for (i = expunges_count*2; i > 0; i -= 2) {
 			seq = expunges[i-1];
 			if (seq > messages_count)
 				seq = messages_count;
-			for (; seq >= expunges[i-2]; seq--)
+			for (; seq >= expunges[i-2]; seq--) {
 				sc->expunge(&ibox->box, seq, sc_context);
+				new_messages_count--;
+			}
 		}
 	}
 
 	mail_index_view_sync_end(ctx);
 
-	if (appends) {
-		messages_count = mail_index_view_get_message_count(ibox->view);
+	messages_count = mail_index_view_get_message_count(ibox->view);
+	if (messages_count != new_messages_count) {
 		recent_count = ibox->get_recent_count(ibox);
 		sc->new_messages(&ibox->box, messages_count, recent_count,
 				 sc_context);



More information about the dovecot-cvs mailing list