Mercurial > dovecot > core-2.2
diff src/lib-index/mail-index.c @ 17579:092137bd092b
lib-index: Fixed error handling in mail_index_open()
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 03 Jul 2014 17:40:37 +0300 |
parents | 8944983786cc |
children | 6aeb2a7e5303 |
line wrap: on
line diff
--- 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;