[dovecot-cvs] dovecot/src/lib-index mail-tree.c,1.6,1.7

cras at procontrol.fi cras at procontrol.fi
Fri Oct 25 06:25:54 EEST 2002


Update of /home/cvs/dovecot/src/lib-index
In directory danu:/tmp/cvs-serv31638

Modified Files:
	mail-tree.c 
Log Message:
Tree file wasn't correctly re-mmap()ed when sync_id changed.



Index: mail-tree.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-tree.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- mail-tree.c	24 Oct 2002 01:48:33 -0000	1.6
+++ mail-tree.c	25 Oct 2002 02:25:52 -0000	1.7
@@ -44,20 +44,8 @@
 	return FALSE;
 }
 
-int _mail_tree_mmap_update(MailTree *tree, int forced)
+static int mmap_update(MailTree *tree)
 {
-	if (!forced && tree->header != NULL &&
-	    tree->sync_id == tree->header->sync_id) {
-		/* make sure file size hasn't changed */
-		tree->mmap_used_length = tree->header->used_file_size;
-		if (tree->mmap_used_length > tree->mmap_full_length) {
-			i_panic("Tree file size was grown without "
-				"updating sync_id");
-		}
-
-		return TRUE;
-	}
-
 	i_assert(!tree->anon_mmap);
 
 	if (tree->mmap_base != NULL) {
@@ -134,6 +122,23 @@
 	return TRUE;
 }
 
+int _mail_tree_mmap_update(MailTree *tree, int forced)
+{
+	if (!forced && tree->header != NULL &&
+	    tree->sync_id == tree->header->sync_id) {
+		/* make sure file size hasn't changed */
+		tree->mmap_used_length = tree->header->used_file_size;
+		if (tree->mmap_used_length > tree->mmap_full_length) {
+			i_panic("Tree file size was grown without "
+				"updating sync_id");
+		}
+
+		return TRUE;
+	}
+
+	return mmap_update(tree) && mmap_verify(tree);
+}
+
 static MailTree *mail_tree_open(MailIndex *index)
 {
 	MailTree *tree;
@@ -209,7 +214,7 @@
 		return FALSE;
 
 	do {
-		if (!_mail_tree_mmap_update(tree, TRUE))
+		if (!mmap_update(tree))
 			break;
 
 		if (tree->mmap_full_length == 0) {
@@ -281,8 +286,7 @@
 		return FALSE;
 
 	if (!mail_tree_init(tree) ||
-	    !_mail_tree_mmap_update(tree, TRUE) ||
-	    !mmap_verify(tree)) {
+	    !_mail_tree_mmap_update(tree, TRUE)) {
 		tree->index->header->flags |= MAIL_INDEX_FLAG_REBUILD_TREE;
 		return FALSE;
 	}
@@ -360,7 +364,7 @@
 	tree->header->sync_id++;
 	tree->modified = TRUE;
 
-	if (!_mail_tree_mmap_update(tree, TRUE) || !mmap_verify(tree))
+	if (!_mail_tree_mmap_update(tree, TRUE))
 		return FALSE;
 
 	return TRUE;




More information about the dovecot-cvs mailing list