changeset 5345:063c892d0439 HEAD

deleted_space wasn't being calculated, so the index was never compressed.
author Timo Sirainen <tss@iki.fi>
date Fri, 16 Mar 2007 02:33:52 +0200
parents da77f5dd7854
children e39ce58a463b
files src/lib-index/mailbox-list-index-sync.c
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mailbox-list-index-sync.c	Fri Mar 16 02:18:13 2007 +0200
+++ b/src/lib-index/mailbox-list-index-sync.c	Fri Mar 16 02:33:52 2007 +0200
@@ -502,7 +502,7 @@
 
 	/* count how much space we need and how much we wasted for deleted
 	   records */
-	nondeleted_count = 0; space_needed = 0; deleted_space = 0;
+	nondeleted_count = 0; space_needed = 0;
 	sync_recs = array_get_modifiable(&sync_dir->records, &count);
 	for (src = 0; src < count; src++) {
 		if (sync_recs[src].seen || partial) {
@@ -511,9 +511,6 @@
 				/* new record */
 				space_needed += strlen(sync_recs[src].name) + 1;
 			}
-		} else {
-			deleted_space += sizeof(*new_recs) +
-				strlen(sync_recs[src].name) + 1;
 		}
 	}
 
@@ -528,6 +525,7 @@
 	if (sync_dir->offset == 0) {
 		dir = NULL;
 		recs = NULL;
+		deleted_space = 0;
 	} else {
 		/* the offset should have been verified already to be valid */
 		i_assert(sync_dir->offset == offset_pos);
@@ -535,6 +533,10 @@
 		dir = CONST_PTR_OFFSET(index->const_mmap_base,
 				       sync_dir->offset);
 		recs = MAILBOX_LIST_RECORDS(dir);
+
+		/* approximate deleted_space. some of the mailbox names will be
+		   reused, but don't bother calculating them. */
+		deleted_space = sizeof(*dir) + dir->dir_size;
 	}
 
 	new_dir = base;
@@ -627,6 +629,7 @@
 		index->hdr = index->const_mmap_base;
 	}
 
+	ctx->hdr.deleted_space += deleted_space;
 	sync_dir->offset = base_offset;
 	return 0;
 }