changeset 2904:642ba9cd3dac HEAD

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.
author Timo Sirainen <tss@iki.fi>
date Mon, 29 Nov 2004 01:19:53 +0200
parents bd8f47bda4c7
children 1e0d71e67315
files src/lib-index/mail-cache-compress.c src/lib-index/mail-index-sync-update.c src/lib-index/mail-index-sync.c src/lib-index/mail-index-transaction-view.c src/lib-index/mail-index-transaction.c src/lib-index/mail-index-view-private.h src/lib-index/mail-index-view-sync.c src/lib-index/mail-index-view.c src/lib-index/mail-index.h src/lib-storage/index/index-sync.c src/lib-storage/index/mbox/mbox-sync.c
diffstat 11 files changed, 37 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-cache-compress.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-cache-compress.c	Mon Nov 29 01:19:53 2004 +0200
@@ -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,
--- a/src/lib-index/mail-index-sync-update.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-index-sync-update.c	Mon Nov 29 01:19:53 2004 +0200
@@ -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);
 
--- a/src/lib-index/mail-index-sync.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-index-sync.c	Mon Nov 29 01:19:53 2004 +0200
@@ -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;
--- a/src/lib-index/mail-index-transaction-view.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-index-transaction-view.c	Mon Nov 29 01:19:53 2004 +0200
@@ -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);
 }
--- a/src/lib-index/mail-index-transaction.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-index-transaction.c	Mon Nov 29 01:19:53 2004 +0200
@@ -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));
 
--- a/src/lib-index/mail-index-view-private.h	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-index-view-private.h	Mon Nov 29 01:19:53 2004 +0200
@@ -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;
--- a/src/lib-index/mail-index-view-sync.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-index-view-sync.c	Mon Nov 29 01:19:53 2004 +0200
@@ -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,
--- a/src/lib-index/mail-index-view.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-index-view.c	Mon Nov 29 01:19:53 2004 +0200
@@ -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 =
--- a/src/lib-index/mail-index.h	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-index/mail-index.h	Mon Nov 29 01:19:53 2004 +0200
@@ -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);
 
--- a/src/lib-storage/index/index-sync.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-storage/index/index-sync.c	Mon Nov 29 01:19:53 2004 +0200
@@ -139,7 +139,7 @@
 		return &ctx->ctx;
 	}
 
-	ctx->messages_count = mail_index_view_get_message_count(ibox->view);
+	ctx->messages_count = mail_index_view_get_messages_count(ibox->view);
 
 	sync_mask = MAIL_INDEX_SYNC_MASK_ALL;
 	if ((flags & MAILBOX_SYNC_FLAG_NO_EXPUNGES) != 0)
@@ -242,7 +242,7 @@
 		mail_index_view_sync_end(ctx->sync_ctx);
 
 	if (ret == 0) {
-		messages_count = mail_index_view_get_message_count(ibox->view);
+		messages_count = mail_index_view_get_messages_count(ibox->view);
 		if (messages_count != ctx->messages_count) {
 			index_mailbox_update_recent(ibox,
 						    ctx->messages_count+1,
--- a/src/lib-storage/index/mbox/mbox-sync.c	Mon Nov 29 01:02:01 2004 +0200
+++ b/src/lib-storage/index/mbox/mbox-sync.c	Mon Nov 29 01:19:53 2004 +0200
@@ -219,7 +219,8 @@
 	uint32_t messages_count;
 	int ret = 0;
 
-	messages_count = mail_index_view_get_message_count(sync_ctx->sync_view);
+	messages_count =
+		mail_index_view_get_messages_count(sync_ctx->sync_view);
 	while (sync_ctx->idx_seq <= messages_count) {
 		ret = mail_index_lookup(sync_ctx->sync_view,
 					sync_ctx->idx_seq, &rec);
@@ -267,7 +268,8 @@
 	const void *data;
 	int ret;
 
-	messages_count = mail_index_view_get_message_count(sync_ctx->sync_view);
+	messages_count =
+		mail_index_view_get_messages_count(sync_ctx->sync_view);
 	while (sync_ctx->idx_seq <= messages_count) {
 		ret = mail_index_lookup(sync_ctx->sync_view,
 					sync_ctx->idx_seq, &rec);
@@ -751,7 +753,7 @@
 			return -1;
 		}
 		sync_ctx->idx_seq =
-			mail_index_view_get_message_count(sync_view) + 1;
+			mail_index_view_get_messages_count(sync_view) + 1;
 		return 1;
 	}
 
@@ -767,7 +769,8 @@
 	uoff_t offset;
 	int ret, expunged;
 
-	messages_count = mail_index_view_get_message_count(sync_ctx->sync_view);
+	messages_count =
+		mail_index_view_get_messages_count(sync_ctx->sync_view);
 
 	if (!mail_index_sync_have_more(sync_ctx->index_sync_ctx) ||
 	    (!partial && min_message_count != 0)) {