diff src/lib-index/mail-index.c @ 5819:4ea31bf18a56 HEAD

Handle indexid changes better.
author Timo Sirainen <tss@iki.fi>
date Thu, 28 Jun 2007 01:03:18 +0300
parents 98d5e3bd4d13
children e59892590a02
line wrap: on
line diff
--- a/src/lib-index/mail-index.c	Thu Jun 28 00:04:31 2007 +0300
+++ b/src/lib-index/mail-index.c	Thu Jun 28 01:03:18 2007 +0300
@@ -1,6 +1,7 @@
 /* Copyright (C) 2003-2004 Timo Sirainen */
 
 #include "lib.h"
+#include "ioloop.h"
 #include "array.h"
 #include "buffer.h"
 #include "hash.h"
@@ -404,11 +405,20 @@
 		if ((flags & MAIL_INDEX_OPEN_FLAG_CREATE) == 0)
 			return FALSE;
 
+		/* if dovecot.index exists, read it first so that we can get
+		   the correct indexid and log sequence */
+		(void)mail_index_try_open(index);
+
+		if (index->indexid == 0) {
+			/* create a new indexid for us */
+			index->indexid = ioloop_time;
+		}
+
 		ret = mail_transaction_log_create(index->log);
 		created = TRUE;
 	}
 	if (ret >= 0) {
-		ret = created ? 0 : mail_index_try_open(index);
+		ret = index->map != NULL ? 0 : mail_index_try_open(index);
 		if (ret == 0) {
 			/* doesn't exist / corrupted */
 			index->map = mail_index_map_alloc(index);