[dovecot-cvs] dovecot/src/lib-index mail-index-transaction-private.h, 1.28, 1.29 mail-index-transaction.c, 1.72, 1.73

cras at dovecot.org cras at dovecot.org
Sun Jan 15 02:11:38 EET 2006


Update of /var/lib/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv24229

Modified Files:
	mail-index-transaction-private.h mail-index-transaction.c 
Log Message:
Added some checks and better logging for figuring out why (*seq != 0) assert
happens.



Index: mail-index-transaction-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-transaction-private.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- mail-index-transaction-private.h	14 Jan 2006 18:47:34 -0000	1.28
+++ mail-index-transaction-private.h	15 Jan 2006 00:11:36 -0000	1.29
@@ -4,8 +4,8 @@
 #include "mail-transaction-log.h"
 
 struct mail_index_transaction_keyword_update {
-	array_t ARRAY_DEFINE(add_seq, uint32_t);
-	array_t ARRAY_DEFINE(remove_seq, uint32_t);
+	array_t ARRAY_DEFINE(add_seq, struct seq_range);
+	array_t ARRAY_DEFINE(remove_seq, struct seq_range);
 };
 
 struct mail_index_transaction {

Index: mail-index-transaction.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-transaction.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -d -r1.72 -r1.73
--- mail-index-transaction.c	14 Jan 2006 18:47:34 -0000	1.72
+++ mail-index-transaction.c	15 Jan 2006 00:11:36 -0000	1.73
@@ -121,15 +121,24 @@
 		seq = array_idx_modifyable(array, i);
 
 		for (j = 0; j <= range_count; j++, seq++) {
-			if (*seq >= t->first_new_seq) {
+			i_assert(*seq > 0);
+
+			if (*seq >= t->first_new_seq)
 				rec = mail_index_transaction_lookup(t, *seq);
-				*seq = rec->uid;
-			} else {
+			else {
 				i_assert(*seq <= view->map->records_count);
-				*seq = MAIL_INDEX_MAP_IDX(view->map,
-							  *seq - 1)->uid;
+				rec = MAIL_INDEX_MAP_IDX(view->map, *seq - 1);
 			}
-			i_assert(*seq != 0);
+
+			if (rec->uid == 0) {
+				/* FIXME: replace with simple assert once we
+				   figure out why this happens.. */
+				i_panic("seq = %u, rec->uid = %u, "
+					"first_new_seq = %u, records = %u",
+					*seq, rec->uid, t->first_new_seq,
+					view->map->records_count);
+			}
+			*seq = rec->uid;
 		}
 	}
 }



More information about the dovecot-cvs mailing list