dovecot-2.2: lib-index: Fixed error handling in mail_index_open()

dovecot at dovecot.org dovecot at dovecot.org
Thu Jul 3 14:46:06 UTC 2014


details:   http://hg.dovecot.org/dovecot-2.2/rev/092137bd092b
changeset: 17579:092137bd092b
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Jul 03 17:40:37 2014 +0300
description:
lib-index: Fixed error handling in mail_index_open()

diffstat:

 src/lib-index/mail-index.c |  24 +++++++++++++-----------
 1 files changed, 13 insertions(+), 11 deletions(-)

diffs (63 lines):

diff -r 8944983786cc -r 092137bd092b src/lib-index/mail-index.c
--- a/src/lib-index/mail-index.c	Thu Jul 03 17:29:58 2014 +0300
+++ b/src/lib-index/mail-index.c	Thu Jul 03 17:40:37 2014 +0300
@@ -26,6 +26,8 @@
 
 struct mail_index_module_register mail_index_module_register = { 0 };
 
+static void mail_index_close_nonopened(struct mail_index *index);
+
 struct mail_index *mail_index_alloc(const char *dir, const char *prefix)
 {
 	struct mail_index *index;
@@ -559,8 +561,6 @@
 	if (index->open_count > 0) {
 		if ((ret = mail_index_open_opened(index, flags)) <= 0) {
 			/* doesn't exist and create flag not used */
-			index->open_count++;
-			mail_index_close(index);
 		}
 		return ret;
 	}
@@ -591,8 +591,7 @@
 	   of the index files */
 	if ((ret = mail_index_open_files(index, flags)) <= 0) {
 		/* doesn't exist and create flag not used */
-		index->open_count++;
-		mail_index_close(index);
+		mail_index_close_nonopened(index);
 		return ret;
 	}
 	index->open_count++;
@@ -628,14 +627,8 @@
 	index->lock_type = F_UNLCK;
 }
 
-void mail_index_close(struct mail_index *index)
+static void mail_index_close_nonopened(struct mail_index *index)
 {
-	i_assert(index->open_count > 0);
-
-	mail_index_alloc_cache_index_closing(index);
-	if (--index->open_count > 0)
-		return;
-
 	i_assert(!index->syncing);
 	i_assert(index->views == NULL);
 
@@ -652,6 +645,15 @@
 	index->indexid = 0;
 }
 
+void mail_index_close(struct mail_index *index)
+{
+	i_assert(index->open_count > 0);
+
+	mail_index_alloc_cache_index_closing(index);
+	if (--index->open_count == 0)
+		mail_index_close_nonopened(index);
+}
+
 int mail_index_unlink(struct mail_index *index)
 {
 	const char *path;


More information about the dovecot-cvs mailing list