[dovecot-cvs] dovecot/src/lib-index mail-cache-compress.c, 1.28, 1.29 mail-index-sync-update.c, 1.59, 1.60 mail-index-sync.c, 1.42, 1.43 mail-index-transaction-view.c, 1.9, 1.10 mail-index-transaction.c, 1.35, 1.36 mail-index-view-private.h, 1.15, 1.16 mail-index-view-sync.c, 1.30, 1.31 mail-index-view.c, 1.29, 1.30 mail-index.h, 1.137, 1.138

cras at dovecot.org cras at dovecot.org
Mon Nov 29 01:19:56 EET 2004


Update of /var/lib/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv8454/lib-index

Modified Files:
	mail-cache-compress.c mail-index-sync-update.c 
	mail-index-sync.c mail-index-transaction-view.c 
	mail-index-transaction.c mail-index-view-private.h 
	mail-index-view-sync.c mail-index-view.c mail-index.h 
Log Message:
Removed view->messages_count, view->hdr.messages_count is enough. Also fixes
assert crash in mail_index_bsearch_uid().

Renamed .._get_message_count() to get_messages_count() to be more
consistent.



Index: mail-cache-compress.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-cache-compress.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- mail-cache-compress.c	24 Nov 2004 18:39:57 -0000	1.28
+++ mail-cache-compress.c	28 Nov 2004 23:19:53 -0000	1.29
@@ -127,7 +127,7 @@
 	idx_hdr = mail_index_get_header(view);
 	if (idx_hdr->day_first_uid[7] == 0) {
 		first_new_seq = 1;
-		message_count = mail_index_view_get_message_count(view);
+		message_count = mail_index_view_get_messages_count(view);
 	} else {
 		if (mail_index_lookup_uid_range(view, idx_hdr->day_first_uid[7],
 						(uint32_t)-1, &first_new_seq,

Index: mail-index-sync-update.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-sync-update.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- mail-index-sync-update.c	28 Nov 2004 23:02:01 -0000	1.59
+++ mail-index-sync-update.c	28 Nov 2004 23:19:53 -0000	1.60
@@ -250,7 +250,6 @@
 
 	map->records_count -= count;
 	map->hdr.messages_count -= count;
-	view->messages_count -= count;
 
 	if (map->buffer != NULL) {
 		buffer_set_used_size(map->buffer, map->records_count *
@@ -291,7 +290,6 @@
 
 	map->hdr.messages_count++;
 	map->hdr.next_uid = rec->uid+1;
-	view->messages_count++;
 	map->records_count++;
 
 	if ((rec->flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0)
@@ -712,7 +710,7 @@
 				       ext->hdr_size), 0, ext->hdr_size);
 	map->hdr_base = map->hdr_copy_buf->data;
 
-	for (i = 0; i < view->messages_count; i++) {
+	for (i = 0; i < view->map->records_count; i++) {
 		rec = MAIL_INDEX_MAP_IDX(view->map, i);
 		memset(PTR_OFFSET(rec, ext->record_offset), 0,
 		       ext->record_size);
@@ -1146,7 +1144,6 @@
 	}
 
 	i_assert(map->records_count == map->hdr.messages_count);
-	i_assert(view->messages_count == map->hdr.messages_count);
 
 	mail_transaction_log_get_head(index->log, &seq, &offset);
 

Index: mail-index-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-sync.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -d -r1.42 -r1.43
--- mail-index-sync.c	24 Nov 2004 20:42:02 -0000	1.42
+++ mail-index-sync.c	28 Nov 2004 23:19:53 -0000	1.43
@@ -151,7 +151,7 @@
 
 	memset(&update, 0, sizeof(update));
 
-	messages_count = mail_index_view_get_message_count(ctx->view);
+	messages_count = mail_index_view_get_messages_count(ctx->view);
 	for (seq = 1; seq <= messages_count; seq++) {
 		if (mail_index_lookup(ctx->view, seq, &rec) < 0)
 			return -1;
@@ -181,7 +181,7 @@
 
 	memset(&update, 0, sizeof(update));
 
-	messages_count = mail_index_view_get_message_count(ctx->view);
+	messages_count = mail_index_view_get_messages_count(ctx->view);
 	for (seq = 1; seq <= messages_count; seq++) {
 		if (mail_index_lookup(ctx->view, seq, &rec) < 0)
 			return -1;

Index: mail-index-transaction-view.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-transaction-view.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- mail-index-transaction-view.c	24 Nov 2004 18:39:57 -0000	1.9
+++ mail-index-transaction-view.c	28 Nov 2004 23:19:53 -0000	1.10
@@ -26,7 +26,7 @@
 	struct mail_index_view_transaction *tview =
                 (struct mail_index_view_transaction *)view;
 
-	return view->messages_count +
+	return view->hdr.messages_count +
 		(tview->t->last_new_seq == 0 ? 0 :
 		 tview->t->last_new_seq - tview->t->first_new_seq);
 }

Index: mail-index-transaction.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-transaction.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- mail-index-transaction.c	13 Nov 2004 23:08:07 -0000	1.35
+++ mail-index-transaction.c	28 Nov 2004 23:19:53 -0000	1.36
@@ -29,7 +29,7 @@
 	t->view = view;
 	t->hide_transaction = hide;
 	t->external = external;
-	t->first_new_seq = mail_index_view_get_message_count(t->view)+1;
+	t->first_new_seq = mail_index_view_get_messages_count(t->view)+1;
 
 	if (view->syncing) {
 		/* transaction view cannot work if new records are being added
@@ -255,7 +255,7 @@
 	unsigned int idx, left_idx, right_idx;
 	size_t size;
 
-	i_assert(seq > 0 && seq <= mail_index_view_get_message_count(t->view));
+	i_assert(seq > 0 && seq <= mail_index_view_get_messages_count(t->view));
 
 	t->log_updates = TRUE;
 	exp.uid1 = exp.uid2 = seq;
@@ -386,7 +386,7 @@
 		return;
 	}
 
-	i_assert(seq > 0 && seq <= mail_index_view_get_message_count(t->view));
+	i_assert(seq > 0 && seq <= mail_index_view_get_messages_count(t->view));
 
 	/* first get group updates into same structure. this allows faster
 	   updates if same mails have multiple flag updates during same
@@ -665,7 +665,7 @@
 	size_t size;
 
 	i_assert(seq > 0 &&
-		 (seq <= mail_index_view_get_message_count(t->view) ||
+		 (seq <= mail_index_view_get_messages_count(t->view) ||
 		  seq <= t->last_new_seq));
 	i_assert(ext_id < index->extensions->used / sizeof(*ext));
 

Index: mail-index-view-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-view-private.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- mail-index-view-private.h	24 Nov 2004 18:39:57 -0000	1.15
+++ mail-index-view-private.h	28 Nov 2004 23:19:53 -0000	1.16
@@ -5,7 +5,7 @@
 
 struct mail_index_view_methods {
 	void (*close)(struct mail_index_view *view);
-	uint32_t (*get_message_count)(struct mail_index_view *view);
+	uint32_t (*get_messages_count)(struct mail_index_view *view);
 	const struct mail_index_header *
 		(*get_header)(struct mail_index_view *view);
 	int (*lookup_full)(struct mail_index_view *view, uint32_t seq,
@@ -39,7 +39,6 @@
 	buffer_t *map_refs;
 
 	struct mail_index_header hdr;
-	uint32_t messages_count; /* last synced one, map may be different */
 
 	uint32_t log_file_seq;
 	uoff_t log_file_offset;

Index: mail-index-view-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-view-sync.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- mail-index-view-sync.c	14 Nov 2004 01:23:21 -0000	1.30
+++ mail-index-view-sync.c	28 Nov 2004 23:19:53 -0000	1.31
@@ -125,7 +125,8 @@
 	mail_index_sync_map_init(&ctx->sync_map_ctx, view,
 				 MAIL_INDEX_SYNC_HANDLER_VIEW);
 
-	if ((sync_mask & MAIL_INDEX_SYNC_TYPE_EXPUNGE) != 0) {
+	if ((sync_mask & MAIL_INDEX_SYNC_TYPE_EXPUNGE) != 0 &&
+	    (sync_mask & MAIL_INDEX_SYNC_TYPE_APPEND) != 0) {
 		view->new_map = view->index->map;
 		view->new_map->refcount++;
 
@@ -139,7 +140,7 @@
 
 		if (view->map != view->index->map) {
 			ctx->sync_map_update = TRUE;
-                        view->map->records_count = view->messages_count;
+                        view->map->records_count = view->hdr.messages_count;
 		}
 
 		map = mail_index_map_to_memory(view->map,
@@ -359,12 +360,6 @@
 		view->map = view->new_map;
 		view->new_map = NULL;
 	}
-
-	if ((ctx->trans_sync_mask & MAIL_TRANSACTION_APPEND) != 0) {
-		i_assert(view->messages_count == view->map->records_count ||
-			 !ctx->sync_map_update);
-		view->messages_count = view->map->records_count;
-	}
 	view->hdr = view->map->hdr;
 
 	(void)mail_transaction_log_view_set(view->log_view,

Index: mail-index-view.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-view.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- mail-index-view.c	24 Nov 2004 18:39:57 -0000	1.29
+++ mail-index-view.c	28 Nov 2004 23:19:53 -0000	1.30
@@ -18,7 +18,6 @@
 	dest->map = src->map;
 	dest->map->refcount++;
 	dest->hdr = src->hdr;
-	dest->messages_count = src->messages_count;
 
 	dest->log_file_seq = src->log_file_seq;
 	dest->log_file_offset = src->log_file_offset;
@@ -159,9 +158,9 @@
 	buffer_set_used_size(view->map_refs, 0);
 }
 
-static uint32_t _view_get_message_count(struct mail_index_view *view)
+static uint32_t _view_get_messages_count(struct mail_index_view *view)
 {
-	return view->messages_count;
+	return view->hdr.messages_count;
 }
 
 static const struct mail_index_header *
@@ -178,7 +177,7 @@
 	const struct mail_index_record *rec, *n_rec;
 	uint32_t uid;
 
-	i_assert(seq > 0 && seq <= mail_index_view_get_message_count(view));
+	i_assert(seq > 0 && seq <= mail_index_view_get_messages_count(view));
 
 	if (mail_index_view_lock(view) < 0)
 		return -1;
@@ -229,7 +228,7 @@
 static int _view_lookup_uid(struct mail_index_view *view, uint32_t seq,
 			    uint32_t *uid_r)
 {
-	i_assert(seq > 0 && seq <= mail_index_view_get_message_count(view));
+	i_assert(seq > 0 && seq <= mail_index_view_get_messages_count(view));
 
 	if (mail_index_view_lock(view) < 0)
 		return -1;
@@ -245,13 +244,13 @@
 	const struct mail_index_record *rec_base, *rec;
 	uint32_t idx, left_idx, right_idx, record_size;
 
-	i_assert(view->messages_count <= view->map->records_count);
+	i_assert(view->hdr.messages_count <= view->map->records_count);
 
 	rec_base = view->map->records;
 	record_size = view->map->hdr.record_size;
 
 	idx = left_idx = *left_idx_p;
-	right_idx = view->messages_count;
+	right_idx = view->hdr.messages_count;
 
 	while (left_idx < right_idx) {
 		idx = (left_idx + right_idx) / 2;
@@ -265,7 +264,7 @@
 			break;
 	}
 
-	if (idx == view->messages_count) {
+	if (idx == view->hdr.messages_count) {
 		/* no messages available */
 		return 0;
 	}
@@ -276,7 +275,7 @@
 		if (nearest_side > 0) {
 			/* we want uid or larger */
 			return rec->uid > uid ? idx+1 :
-				idx == view->messages_count-1 ? 0 : idx+2;
+				idx == view->hdr.messages_count-1 ? 0 : idx+2;
 		} else {
 			/* we want uid or smaller */
 			return rec->uid < uid ? idx + 1 : idx;
@@ -358,7 +357,9 @@
 			return 0;
 	}
 
-	for (; seq <= view->messages_count; seq++) {
+	i_assert(view->hdr.messages_count <= view->map->records_count);
+
+	for (; seq <= view->hdr.messages_count; seq++) {
 		rec = MAIL_INDEX_MAP_IDX(view->map, seq-1);
 		if ((rec->flags & flags_mask) == (uint8_t)flags) {
 			*seq_r = seq;
@@ -426,9 +427,9 @@
 	view->methods.close(view);
 }
 
-uint32_t mail_index_view_get_message_count(struct mail_index_view *view)
+uint32_t mail_index_view_get_messages_count(struct mail_index_view *view)
 {
-	return view->messages_count;
+	return view->methods.get_messages_count(view);
 }
 
 const struct mail_index_header *
@@ -504,7 +505,7 @@
 
 static struct mail_index_view_methods view_methods = {
 	_view_close,
-	_view_get_message_count,
+	_view_get_messages_count,
 	_view_get_header,
 	_view_lookup_full,
 	_view_lookup_uid,
@@ -529,7 +530,6 @@
 	view->map->refcount++;
 
 	view->hdr = view->map->hdr;
-	view->messages_count = view->map->records_count;
 
 	view->log_file_seq = view->map->hdr.log_file_seq;
 	view->log_file_offset =

Index: mail-index.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index.h,v
retrieving revision 1.137
retrieving revision 1.138
diff -u -d -r1.137 -r1.138
--- mail-index.h	24 Nov 2004 20:40:39 -0000	1.137
+++ mail-index.h	28 Nov 2004 23:19:53 -0000	1.138
@@ -165,7 +165,7 @@
 /* Call whenever you've done with requesting messages from view for a while. */
 void mail_index_view_unlock(struct mail_index_view *view);
 /* Returns number of mails in view. */
-uint32_t mail_index_view_get_message_count(struct mail_index_view *view);
+uint32_t mail_index_view_get_messages_count(struct mail_index_view *view);
 /* Returns TRUE if we lost track of changes for some reason. */
 int mail_index_view_is_inconsistent(struct mail_index_view *view);
 



More information about the dovecot-cvs mailing list