From: Timo Sirainen Date: Thu, 24 Feb 2011 11:19:05 +0000 (+0200) Subject: lib-index: Give better assert-crashes if view or log view isn't closed. X-Git-Tag: 2.1.alpha1~326 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1727610dbc69920b7f0d0622b4e5d7127c59093d;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Give better assert-crashes if view or log view isn't closed. Earlier it should have also assert-crashed with "log->files == NULL", which didn't make it clear enough why the files aren't NULL. --- diff --git a/src/lib-index/mail-index-private.h b/src/lib-index/mail-index-private.h index 2b97966dc0..ad7d5209eb 100644 --- a/src/lib-index/mail-index-private.h +++ b/src/lib-index/mail-index-private.h @@ -221,6 +221,8 @@ struct mail_index { uint32_t keywords_ext_id; uint32_t modseq_ext_id; + unsigned int view_count; + /* Module-specific contexts. */ ARRAY_DEFINE(module_contexts, union mail_index_module_context *); diff --git a/src/lib-index/mail-index-view.c b/src/lib-index/mail-index-view.c index 67493f6f61..3cee97228b 100644 --- a/src/lib-index/mail-index-view.c +++ b/src/lib-index/mail-index-view.c @@ -31,6 +31,8 @@ void mail_index_view_clone(struct mail_index_view *dest, i_array_init(&dest->module_contexts, I_MIN(5, mail_index_module_register.id)); + + dest->index->view_count++; } void mail_index_view_ref(struct mail_index_view *view) @@ -41,6 +43,9 @@ void mail_index_view_ref(struct mail_index_view *view) static void view_close(struct mail_index_view *view) { i_assert(view->refcount == 0); + i_assert(view->index->view_count > 0); + + view->index->view_count--; mail_transaction_log_view_close(&view->log_view); @@ -614,6 +619,8 @@ mail_index_view_open_with_map(struct mail_index *index, i_array_init(&view->module_contexts, I_MIN(5, mail_index_module_register.id)); + + index->view_count++; return view; } diff --git a/src/lib-index/mail-index.c b/src/lib-index/mail-index.c index 7b2374abdf..ad650f1929 100644 --- a/src/lib-index/mail-index.c +++ b/src/lib-index/mail-index.c @@ -585,6 +585,9 @@ void mail_index_close(struct mail_index *index) if (--index->open_count > 0) return; + i_assert(!index->syncing); + i_assert(index->view_count == 0); + if (index->map != NULL) mail_index_unmap(&index->map); diff --git a/src/lib-index/mail-transaction-log-view.c b/src/lib-index/mail-transaction-log-view.c index c9bbb711ce..ab28623952 100644 --- a/src/lib-index/mail-transaction-log-view.c +++ b/src/lib-index/mail-transaction-log-view.c @@ -58,14 +58,6 @@ void mail_transaction_log_view_close(struct mail_transaction_log_view **_view) i_free(view); } -void mail_transaction_log_views_close(struct mail_transaction_log *log) -{ - struct mail_transaction_log_view *view; - - for (view = log->views; view != NULL; view = view->next) - view->log = NULL; -} - int mail_transaction_log_view_set(struct mail_transaction_log_view *view, uint32_t min_file_seq, uoff_t min_file_offset, uint32_t max_file_seq, uoff_t max_file_offset, diff --git a/src/lib-index/mail-transaction-log.c b/src/lib-index/mail-transaction-log.c index c6ed70fae2..d4af0114cd 100644 --- a/src/lib-index/mail-transaction-log.c +++ b/src/lib-index/mail-transaction-log.c @@ -125,7 +125,7 @@ int mail_transaction_log_create(struct mail_transaction_log *log, bool reset) void mail_transaction_log_close(struct mail_transaction_log *log) { - mail_transaction_log_views_close(log); + i_assert(log->views == NULL); if (log->open_file != NULL) mail_transaction_log_file_free(&log->open_file); diff --git a/src/lib-index/mail-transaction-log.h b/src/lib-index/mail-transaction-log.h index 08a6f686da..cb7fe03593 100644 --- a/src/lib-index/mail-transaction-log.h +++ b/src/lib-index/mail-transaction-log.h @@ -253,8 +253,6 @@ mail_transaction_log_view_set_corrupted(struct mail_transaction_log_view *view, bool mail_transaction_log_view_is_corrupted(struct mail_transaction_log_view *view); -void mail_transaction_log_views_close(struct mail_transaction_log *log); - int mail_transaction_log_append_begin(struct mail_index *index, bool external, struct mail_transaction_log_append_ctx **ctx_r); void mail_transaction_log_append_add(struct mail_transaction_log_append_ctx *ctx,