[dovecot-cvs] dovecot/src/lib-index mail-tree-redblack.c,1.16,1.17

cras at procontrol.fi cras at procontrol.fi
Fri Oct 25 07:23:38 EEST 2002


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

Modified Files:
	mail-tree-redblack.c 
Log Message:
Set node variable after mmap updating which may change it..



Index: mail-tree-redblack.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-tree-redblack.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- mail-tree-redblack.c	24 Oct 2002 02:15:11 -0000	1.16
+++ mail-tree-redblack.c	25 Oct 2002 03:23:36 -0000	1.17
@@ -662,7 +662,7 @@
 					unsigned int first_uid,
 					unsigned int last_uid)
 {
-	MailTreeNode *node = tree->node_base;
+	MailTreeNode *node;
 	unsigned int x, y, seq;
 
 	i_assert(first_uid > 0 && last_uid > 0);
@@ -673,6 +673,7 @@
 		return (unsigned int)-1;
 
 	rb_check(tree);
+	tree->modified = TRUE;
 
 	if (seq_r != NULL)
 		*seq_r = 0;
@@ -720,7 +721,7 @@
 
 unsigned int mail_tree_lookup_sequence(MailTree *tree, unsigned int seq)
 {
-        MailTreeNode *node = tree->node_base;
+        MailTreeNode *node;
 	unsigned int x, upleft_nodes, left_nodes;
 
 	i_assert(seq != 0);
@@ -730,6 +731,7 @@
 		return (unsigned int)-1;
 
 	rb_check(tree);
+	node = tree->node_base;
 
 	x = tree->header->root;
 
@@ -755,7 +757,7 @@
 
 int mail_tree_insert(MailTree *tree, unsigned int uid, unsigned int index)
 {
-        MailTreeNode *node = tree->node_base;
+        MailTreeNode *node;
 	unsigned int x, z;
 
 	i_assert(uid != 0);
@@ -764,7 +766,7 @@
 	if (!_mail_tree_mmap_update(tree, FALSE))
 		return FALSE;
 
-	tree->modified = TRUE;
+	node = tree->node_base;
 
 	/* we'll always insert to right side of the tree */
 	x = tree->header->root;
@@ -807,12 +809,14 @@
 
         rb_insert_fix(tree, z);
         rb_check(tree);
+
+	tree->modified = TRUE;
 	return TRUE;
 }
 
 int mail_tree_update(MailTree *tree, unsigned int uid, unsigned int index)
 {
-	MailTreeNode *node = tree->node_base;
+	MailTreeNode *node;
 	unsigned int x;
 
 	i_assert(uid != 0);
@@ -822,6 +826,7 @@
 		return FALSE;
 
 	rb_check(tree);
+	node = tree->node_base;
 
 	tree->modified = TRUE;
 
@@ -845,7 +850,7 @@
 
 void mail_tree_delete(MailTree *tree, unsigned int uid)
 {
-	MailTreeNode *node = tree->node_base;
+	MailTreeNode *node;
 	unsigned int x;
 
 	i_assert(uid != 0);
@@ -854,7 +859,7 @@
 	if (!_mail_tree_mmap_update(tree, FALSE))
 		return;
 
-	tree->modified = TRUE;
+	node = tree->node_base;
 
 	x = tree->header->root;
 	while (x != RBNULL) {
@@ -869,4 +874,6 @@
 			break;
 		}
 	}
+
+	tree->modified = TRUE;
 }




More information about the dovecot-cvs mailing list