changeset 5853:d9f319a9d6e0 HEAD

mail_index_map now contains pointer to index, so all functions taking map parameter don't need index anymore.
author Timo Sirainen <tss@iki.fi>
date Sun, 01 Jul 2007 18:39:51 +0300
parents 2f9d38b82364
children eca7e29dce0d
files src/lib-index/mail-index-fsck.c src/lib-index/mail-index-map.c src/lib-index/mail-index-private.h src/lib-index/mail-index-sync-ext.c src/lib-index/mail-index-sync-keywords.c src/lib-index/mail-index-sync-private.h src/lib-index/mail-index-sync-update.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.c
diffstat 11 files changed, 58 insertions(+), 64 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-fsck.c	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-fsck.c	Sun Jul 01 18:39:51 2007 +0300
@@ -150,7 +150,7 @@
 	i_warning("fscking index file %s", index->filepath);
 
 	map = mail_index_map_clone(index->map);
-	mail_index_unmap(index, &index->map);
+	mail_index_unmap(&index->map);
 	index->map = map;
 
 	ret = mail_index_fsck_map(index, map, &lock, &error);
--- a/src/lib-index/mail-index-map.c	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-map.c	Sun Jul 01 18:39:51 2007 +0300
@@ -59,8 +59,7 @@
 }
 
 uint32_t
-mail_index_map_register_ext(struct mail_index *index,
-			    struct mail_index_map *map, const char *name,
+mail_index_map_register_ext(struct mail_index_map *map, const char *name,
 			    uint32_t hdr_offset, uint32_t hdr_size,
 			    uint32_t record_offset, uint32_t record_size,
 			    uint32_t record_align, uint32_t reset_id)
@@ -85,7 +84,7 @@
 	ext->record_align = record_align;
 	ext->reset_id = reset_id;
 
-	ext->index_idx = mail_index_ext_register(index, name, hdr_size,
+	ext->index_idx = mail_index_ext_register(map->index, name, hdr_size,
 						 record_size, record_align);
 
 	/* Update index ext_id -> map ext_id mapping. Fill non-used
@@ -110,9 +109,9 @@
 	return MAIL_INDEX_HEADER_SIZE_ALIGN(size) - size;
 }
 
-static int mail_index_parse_extensions(struct mail_index *index,
-                                       struct mail_index_map *map)
+static int mail_index_parse_extensions(struct mail_index_map *map)
 {
+	struct mail_index *index = map->index;
 	const struct mail_index_ext_header *ext_hdr;
 	unsigned int i, old_count;
 	const char *name;
@@ -200,7 +199,7 @@
 			return -1;
 		}
 
-		mail_index_map_register_ext(index, map, name,
+		mail_index_map_register_ext(map, name,
 					    offset, ext_hdr->hdr_size,
 					    ext_hdr->record_offset,
 					    ext_hdr->record_size,
@@ -270,9 +269,9 @@
 	return TRUE;
 }
 
-static int mail_index_check_header(struct mail_index *index,
-				   struct mail_index_map *map)
+static int mail_index_check_header(struct mail_index_map *map)
 {
+	struct mail_index *index = map->index;
 	const struct mail_index_header *hdr = &map->hdr;
 
 	if (!mail_index_check_header_compat(index, hdr, (uoff_t)-1))
@@ -322,8 +321,7 @@
 	return 1;
 }
 
-static void mail_index_map_clear(struct mail_index *index,
-				 struct mail_index_map *map)
+static void mail_index_map_clear(struct mail_index_map *map)
 {
 	if (map->buffer != NULL) {
 		i_assert(map->mmap_base == NULL);
@@ -332,7 +330,7 @@
 	} else if (map->mmap_base != NULL) {
 		i_assert(map->buffer == NULL);
 		if (munmap(map->mmap_base, map->mmap_size) < 0)
-			mail_index_set_syscall_error(index, "munmap()");
+			mail_index_set_syscall_error(map->index, "munmap()");
 		map->mmap_base = NULL;
 	}
 
@@ -358,9 +356,9 @@
 	}
 }
 
-static int mail_index_mmap(struct mail_index *index, struct mail_index_map *map,
-			   uoff_t file_size)
+static int mail_index_mmap(struct mail_index_map *map, uoff_t file_size)
 {
+	struct mail_index *index = map->index;
 	const struct mail_index_header *hdr;
 	unsigned int records_count;
 
@@ -452,9 +450,10 @@
 }
 
 static int
-mail_index_try_read_map(struct mail_index *index, struct mail_index_map *map,
+mail_index_try_read_map(struct mail_index_map *map,
 			uoff_t file_size, bool *retry_r, bool try_retry)
 {
+	struct mail_index *index = map->index;
 	const struct mail_index_header *hdr;
 	unsigned char read_buf[4096];
 	const void *buf;
@@ -563,10 +562,9 @@
 	return 1;
 }
 
-static int
-mail_index_read_map(struct mail_index *index, struct mail_index_map *map,
-		    uoff_t file_size)
+static int mail_index_read_map(struct mail_index_map *map, uoff_t file_size)
 {
+	struct mail_index *index = map->index;
 	mail_index_sync_lost_handler_t *const *handlers;
 	struct stat st;
 	unsigned int i, count;
@@ -585,7 +583,7 @@
 			ret = 0;
 			retry = try_retry;
 		} else {
-			ret = mail_index_try_read_map(index, map, file_size,
+			ret = mail_index_try_read_map(map, file_size,
 						      &retry, try_retry);
 		}
 		if (ret != 0 || !retry)
@@ -646,6 +644,7 @@
 
 	memset(&tmp_map, 0, sizeof(tmp_map));
 	mail_index_header_init(index, &tmp_map.hdr);
+	tmp_map.index = index;
 	tmp_map.hdr_base = &tmp_map.hdr;
 
 	/* a bit kludgy way to do this, but it initializes everything
@@ -693,18 +692,18 @@
 		file_size > MAIL_INDEX_MMAP_MIN_SIZE;
 
 	new_map = mail_index_map_alloc(index);
-	ret = use_mmap ? mail_index_mmap(index, new_map, file_size) :
-		mail_index_read_map(index, new_map, file_size);
+	ret = use_mmap ? mail_index_mmap(new_map, file_size) :
+		mail_index_read_map(new_map, file_size);
 	if (ret > 0) {
 		/* make sure the header is ok before using this mapping */
-		ret = mail_index_check_header(index, new_map);
+		ret = mail_index_check_header(new_map);
 		if (ret >= 0)
-			ret = mail_index_parse_extensions(index, new_map);
+			ret = mail_index_parse_extensions(new_map);
 		if (ret++ == 0)
 			index->fsck = TRUE;
 	}
 	if (ret <= 0) {
-		mail_index_unmap(index, &new_map);
+		mail_index_unmap(&new_map);
 		return ret;
 	}
 
@@ -715,7 +714,7 @@
 		new_map->hdr.log_file_tail_offset;
 	index->last_read_stat = st;
 
-	mail_index_unmap(index, map);
+	mail_index_unmap(map);
 	*map = new_map;
 	return 1;
 }
@@ -740,7 +739,7 @@
 	if (index->map->hdr.indexid != 0) {
 		/* we're not creating the index, or opening transaction log.
 		   sync this as a view from transaction log. */
-		ret = mail_index_sync_map(index, &index->map, type, FALSE);
+		ret = mail_index_sync_map(&index->map, type, FALSE);
 	} else {
 		ret = 0;
 	}
@@ -757,8 +756,7 @@
 		if (index->log->head != NULL) {
 			/* and update the map with the latest changes from
 			   transaction log */
-			ret = mail_index_sync_map(index, &index->map,
-						  type, TRUE);
+			ret = mail_index_sync_map(&index->map, type, TRUE);
 		}
 
 		/* we need the lock only if we didn't move the map to memory */
@@ -772,7 +770,7 @@
 	return ret;
 }
 
-void mail_index_unmap(struct mail_index *index, struct mail_index_map **_map)
+void mail_index_unmap(struct mail_index_map **_map)
 {
 	struct mail_index_map *map = *_map;
 
@@ -781,7 +779,7 @@
 		return;
 
 	i_assert(map->refcount == 0);
-	mail_index_map_clear(index, map);
+	mail_index_map_clear(map);
 	if (map->extension_pool != NULL)
 		pool_unref(map->extension_pool);
 	if (array_is_created(&map->keyword_idx_map))
@@ -841,6 +839,7 @@
 	unsigned int i, count;
 
 	mem_map = i_new(struct mail_index_map, 1);
+	mem_map->index = map->index;
 	mem_map->refcount = 1;
 
 	mail_index_map_copy(mem_map, map);
--- a/src/lib-index/mail-index-private.h	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-private.h	Sun Jul 01 18:39:51 2007 +0300
@@ -103,6 +103,7 @@
 };
 
 struct mail_index_map {
+	struct mail_index *index;
 	int refcount;
 
 	struct mail_index_header hdr;
@@ -262,15 +263,14 @@
 int mail_index_get_last_written_header(struct mail_index *index,
 				       struct mail_index_header *hdr_r);
 /* Unreference given mapping and unmap it if it's dropped to zero. */
-void mail_index_unmap(struct mail_index *index, struct mail_index_map **map);
+void mail_index_unmap(struct mail_index_map **map);
 struct mail_index_map *mail_index_map_clone(const struct mail_index_map *map);
 void mail_index_map_move_to_memory(struct mail_index_map *map);
 
 uint32_t mail_index_map_lookup_ext(struct mail_index_map *map,
 				   const char *name);
 uint32_t
-mail_index_map_register_ext(struct mail_index *index,
-			    struct mail_index_map *map, const char *name,
+mail_index_map_register_ext(struct mail_index_map *map, const char *name,
 			    uint32_t hdr_offset, uint32_t hdr_size,
 			    uint32_t record_offset, uint32_t record_size,
 			    uint32_t record_align, uint32_t reset_id);
@@ -279,8 +279,7 @@
 const struct mail_index_ext *
 mail_index_view_get_ext(struct mail_index_view *view, uint32_t ext_id);
 
-int mail_index_map_parse_keywords(struct mail_index *index,
-                                  struct mail_index_map *map);
+int mail_index_map_parse_keywords(struct mail_index_map *map);
 
 void mail_index_view_transaction_ref(struct mail_index_view *view);
 void mail_index_view_transaction_unref(struct mail_index_view *view);
--- a/src/lib-index/mail-index-sync-ext.c	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-sync-ext.c	Sun Jul 01 18:39:51 2007 +0300
@@ -400,9 +400,8 @@
 	   sync_ext_reorder() will fix it. */
 	hdr_offset = hdr_buf->used + sizeof(ext_hdr) + strlen(name);
 	hdr_offset = MAIL_INDEX_HEADER_SIZE_ALIGN(hdr_offset);
-	ext_id = mail_index_map_register_ext(ctx->view->index, map, name,
-					     hdr_offset, u->hdr_size, 0,
-					     u->record_size, u->record_align,
+	ext_id = mail_index_map_register_ext(map, name, hdr_offset, u->hdr_size,
+					     0, u->record_size, u->record_align,
 					     u->reset_id);
 
 	ext = array_idx(&map->extensions, ext_id);
--- a/src/lib-index/mail-index-sync-keywords.c	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-sync-keywords.c	Sun Jul 01 18:39:51 2007 +0300
@@ -16,7 +16,7 @@
 	unsigned int i, count, keyword_idx;
 
 	if (!map->keywords_read) {
-		if (mail_index_map_parse_keywords(ctx->view->index, map) < 0)
+		if (mail_index_map_parse_keywords(map) < 0)
 			return -1;
 	}
 	if (array_is_created(&map->keyword_idx_map) &&
@@ -290,8 +290,7 @@
 	}
 
 	if (!ctx->view->map->keywords_read) {
-		if (mail_index_map_parse_keywords(ctx->view->index,
-                                                  ctx->view->map) < 0)
+		if (mail_index_map_parse_keywords(ctx->view->map) < 0)
 			return -1;
 	}
 
--- a/src/lib-index/mail-index-sync-private.h	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-sync-private.h	Sun Jul 01 18:39:51 2007 +0300
@@ -47,7 +47,7 @@
 			      struct mail_index_view *view,
 			      enum mail_index_sync_handler_type type);
 void mail_index_sync_map_deinit(struct mail_index_sync_map_ctx *sync_map_ctx);
-int mail_index_sync_map(struct mail_index *index, struct mail_index_map **map,
+int mail_index_sync_map(struct mail_index_map **map,
 			enum mail_index_sync_handler_type type, bool force);
 
 int mail_index_sync_record(struct mail_index_sync_map_ctx *ctx,
--- a/src/lib-index/mail-index-sync-update.c	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-sync-update.c	Sun Jul 01 18:39:51 2007 +0300
@@ -84,7 +84,7 @@
 	(void)mail_index_map_msync(view->index, view->map);
 #endif
 
-	mail_index_unmap(view->index, &view->map);
+	mail_index_unmap(&view->map);
 	view->map = map;
 
 	if (ctx->type != MAIL_INDEX_SYNC_HANDLER_VIEW)
@@ -690,10 +690,11 @@
 }
 #endif
 
-int mail_index_sync_map(struct mail_index *index, struct mail_index_map **_map,
+int mail_index_sync_map(struct mail_index_map **_map,
 			enum mail_index_sync_handler_type type, bool force)
 {
 	struct mail_index_map *map = *_map;
+	struct mail_index *index = map->index;
 	struct mail_index_view *view;
 	struct mail_index_sync_map_ctx sync_map_ctx;
 	const struct mail_transaction_header *thdr;
@@ -733,7 +734,7 @@
 
 	start_offset = type == MAIL_INDEX_SYNC_HANDLER_FILE ?
 		map->hdr.log_file_tail_offset : map->hdr.log_file_head_offset;
-	view = mail_index_view_open_with_map(index, map);
+	view = mail_index_view_open_with_map(map);
 	ret = mail_transaction_log_view_set(view->log_view,
 					    map->hdr.log_file_seq, start_offset,
 					    (uint32_t)-1, (uoff_t)-1, &reset);
--- a/src/lib-index/mail-index-view-private.h	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-view-private.h	Sun Jul 01 18:39:51 2007 +0300
@@ -75,8 +75,7 @@
 };
 
 struct mail_index_view *
-mail_index_view_open_with_map(struct mail_index *index,
-			      struct mail_index_map *map);
+mail_index_view_open_with_map(struct mail_index_map *map);
 void mail_index_view_clone(struct mail_index_view *dest,
 			   const struct mail_index_view *src);
 void mail_index_view_ref(struct mail_index_view *view);
--- a/src/lib-index/mail-index-view-sync.c	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-view-sync.c	Sun Jul 01 18:39:51 2007 +0300
@@ -285,7 +285,7 @@
 
 		if (view->map->refcount > 1) {
 			map = mail_index_map_clone(view->map);
-			mail_index_unmap(view->index, &view->map);
+			mail_index_unmap(&view->map);
 			view->map = map;
 		} else {
 			map = view->map;
@@ -591,7 +591,7 @@
 	}
 
 	if (view->sync_new_map != NULL) {
-		mail_index_unmap(view->index, &view->map);
+		mail_index_unmap(&view->map);
 		view->map = view->sync_new_map;
 		view->sync_new_map = NULL;
 	}
--- a/src/lib-index/mail-index-view.c	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index-view.c	Sun Jul 01 18:39:51 2007 +0300
@@ -47,7 +47,7 @@
 
 	if (array_is_created(&view->syncs_hidden))
 		array_free(&view->syncs_hidden);
-	mail_index_unmap(view->index, &view->map);
+	mail_index_unmap(&view->map);
 	if (array_is_created(&view->map_refs)) {
 		mail_index_view_unref_maps(view);
 		array_free(&view->map_refs);
@@ -174,7 +174,7 @@
 
 	maps = array_get_modifiable(&view->map_refs, &count);
 	for (i = 0; i < count; i++)
-		mail_index_unmap(view->index, &maps[i]);
+		mail_index_unmap(&maps[i]);
 
 	array_clear(&view->map_refs);
 }
@@ -553,8 +553,7 @@
 			if (idx >= keyword_count) {
 				/* keyword header was updated, parse it again
 				   it so we know what this keyword is called */
-				if (mail_index_map_parse_keywords(view->index,
-                                                                  map) < 0)
+				if (mail_index_map_parse_keywords(map) < 0)
 					return -1;
 
 				if (!array_is_created(&map->keyword_idx_map))
@@ -671,18 +670,17 @@
 };
 
 struct mail_index_view *
-mail_index_view_open_with_map(struct mail_index *index,
-			      struct mail_index_map *map)
+mail_index_view_open_with_map(struct mail_index_map *map)
 {
 	struct mail_index_view *view;
 
 	view = i_new(struct mail_index_view, 1);
 	view->refcount = 1;
 	view->v = view_vfuncs;
-	view->index = index;
-	view->log_view = mail_transaction_log_view_open(index->log);
+	view->index = map->index;
+	view->log_view = mail_transaction_log_view_open(map->index->log);
 
-	view->indexid = index->indexid;
+	view->indexid = map->index->indexid;
 	view->map = map;
 	view->map->refcount++;
 
@@ -700,7 +698,7 @@
 
 struct mail_index_view *mail_index_view_open(struct mail_index *index)
 {
-	return mail_index_view_open_with_map(index, index->map);
+	return mail_index_view_open_with_map(index->map);
 }
 
 const struct mail_index_ext *
--- a/src/lib-index/mail-index.c	Sun Jul 01 02:12:50 2007 +0300
+++ b/src/lib-index/mail-index.c	Sun Jul 01 18:39:51 2007 +0300
@@ -209,9 +209,9 @@
 	return TRUE;
 }
 
-int mail_index_map_parse_keywords(struct mail_index *index,
-                                  struct mail_index_map *map)
+int mail_index_map_parse_keywords(struct mail_index_map *map)
 {
+	struct mail_index *index = map->index;
 	const struct mail_index_ext *ext;
 	const struct mail_index_keyword_header *kw_hdr;
 	const struct mail_index_keyword_header_rec *kw_rec;
@@ -319,7 +319,7 @@
 {
 	/* Make sure all the keywords are in index->keywords. It's quick to do
 	   if nothing has changed. */
-	(void)mail_index_map_parse_keywords(index, index->map);
+	(void)mail_index_map_parse_keywords(index->map);
 
 	return &index->keywords;
 }
@@ -531,7 +531,7 @@
 void mail_index_close(struct mail_index *index)
 {
 	if (index->map != NULL)
-		mail_index_unmap(index, &index->map);
+		mail_index_unmap(&index->map);
 
 	mail_index_close_file(index);
 	mail_transaction_log_close(index->log);
@@ -647,7 +647,7 @@
 	/* move index map to memory */
 	if (!MAIL_INDEX_MAP_IS_IN_MEMORY(index->map)) {
 		map = mail_index_map_clone(index->map);
-		mail_index_unmap(index, &index->map);
+		mail_index_unmap(&index->map);
 		index->map = map;
 	}