Mercurial > dovecot > core-2.2
changeset 13589:75679aca405a
mailbox list indexes: Error handling fixes.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 02 Oct 2011 17:48:23 +0300 |
parents | 940ddec22822 |
children | 6912969d94e8 |
files | src/lib-storage/list/mailbox-list-index-status.c src/lib-storage/list/mailbox-list-index-sync.c src/lib-storage/list/mailbox-list-index.c src/lib-storage/list/mailbox-list-index.h |
diffstat | 4 files changed, 35 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-index-status.c Sun Oct 02 17:34:49 2011 +0300 +++ b/src/lib-storage/list/mailbox-list-index-status.c Sun Oct 02 17:48:23 2011 +0300 @@ -21,8 +21,8 @@ &mail_storage_module_register); static int -index_list_mailbox_open_view(struct mailbox *box, - struct mail_index_view **view_r, uint32_t *seq_r) +index_list_open_view(struct mailbox *box, struct mail_index_view **view_r, + uint32_t *seq_r) { struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list); struct mailbox_list_index_node *node; @@ -126,7 +126,7 @@ memset(status_r, 0, sizeof(*status_r)); - ret = index_list_mailbox_open_view(box, &view, &seq); + ret = index_list_open_view(box, &view, &seq); if (ret <= 0) return ret; @@ -235,7 +235,11 @@ if (box->v.list_index_update_sync != NULL) box->v.list_index_update_sync(box, trans, seq); - return mail_index_transaction_commit_full(&trans, &result); + if (mail_index_transaction_commit_full(&trans, &result) < 0) { + mailbox_list_index_set_index_error(box->list); + return -1; + } + return 0; } static void
--- a/src/lib-storage/list/mailbox-list-index-sync.c Sun Oct 02 17:34:49 2011 +0300 +++ b/src/lib-storage/list/mailbox-list-index-sync.c Sun Oct 02 17:48:23 2011 +0300 @@ -227,7 +227,6 @@ const char *patterns[2]; enum mailbox_list_index_flags flags; uint32_t seq, orig_highest_name_id; - int ret = 0; mailbox_list_index_reset(ilist); @@ -236,10 +235,11 @@ sync_ctx.sep[0] = mailbox_list_get_hierarchy_sep(list); if (mail_index_sync_begin(ilist->index, &sync_ctx.sync_ctx, &sync_ctx.view, &sync_ctx.trans, - MAIL_INDEX_SYNC_FLAG_AVOID_FLAG_UPDATES) < 0) + MAIL_INDEX_SYNC_FLAG_AVOID_FLAG_UPDATES) < 0) { + mailbox_list_index_set_index_error(list); return -1; - - if (mailbox_list_index_read(ilist, sync_ctx.view, TRUE) < 0) { + } + if (mailbox_list_index_parse(ilist, sync_ctx.view, TRUE) < 0) { mail_index_sync_rollback(&sync_ctx.sync_ctx); return -1; } @@ -280,10 +280,7 @@ mail_index_update_flags(sync_ctx.trans, seq, MODIFY_REPLACE, (enum mail_flags)flags); } - if (ilist->module_ctx.super.iter_deinit(iter) < 0) - ret = -1; - - if (ret < 0) { + if (ilist->module_ctx.super.iter_deinit(iter) < 0) { mail_index_sync_rollback(&sync_ctx.sync_ctx); return -1; } @@ -304,5 +301,9 @@ &new_hdr.refresh_flag, sizeof(new_hdr.refresh_flag)); } - return mail_index_sync_commit(&sync_ctx.sync_ctx); + if (mail_index_sync_commit(&sync_ctx.sync_ctx) < 0) { + mailbox_list_index_set_index_error(list); + return -1; + } + return 0; }
--- a/src/lib-storage/list/mailbox-list-index.c Sun Oct 02 17:34:49 2011 +0300 +++ b/src/lib-storage/list/mailbox-list-index.c Sun Oct 02 17:48:23 2011 +0300 @@ -9,6 +9,14 @@ struct mailbox_list_index_module mailbox_list_index_module = MODULE_CONTEXT_INIT(&mailbox_list_module_register); +void mailbox_list_index_set_index_error(struct mailbox_list *list) +{ + struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list); + + mailbox_list_set_internal_error(list); + mail_index_reset_error(ilist->index); +} + void mailbox_list_index_reset(struct mailbox_list_index *ilist) { hash_table_clear(ilist->mailbox_names, FALSE); @@ -158,8 +166,8 @@ return 0; } -int mailbox_list_index_read(struct mailbox_list_index *ilist, - struct mail_index_view *view, bool force) +int mailbox_list_index_parse(struct mailbox_list_index *ilist, + struct mail_index_view *view, bool force) { const struct mail_index_header *hdr; int ret; @@ -211,8 +219,10 @@ return 0; } - if (mail_index_refresh(ilist->index) < 0) + if (mail_index_refresh(ilist->index) < 0) { + mailbox_list_index_set_index_error(list); return -1; + } view = mail_index_view_open(ilist->index); if (ilist->mailbox_tree == NULL || @@ -220,7 +230,7 @@ /* refresh list of mailboxes */ ret = mailbox_list_index_sync(list); } else { - ret = mailbox_list_index_read(ilist, view, FALSE); + ret = mailbox_list_index_parse(ilist, view, FALSE); } mail_index_view_close(&view); return ret;
--- a/src/lib-storage/list/mailbox-list-index.h Sun Oct 02 17:34:49 2011 +0300 +++ b/src/lib-storage/list/mailbox-list-index.h Sun Oct 02 17:48:23 2011 +0300 @@ -99,6 +99,7 @@ extern MODULE_CONTEXT_DEFINE(mailbox_list_index_module, &mailbox_list_module_register); +void mailbox_list_index_set_index_error(struct mailbox_list *list); struct mailbox_list_index_node * mailbox_list_index_lookup(struct mailbox_list *list, const char *name); @@ -109,8 +110,8 @@ mailbox_list_index_node_find_sibling(struct mailbox_list_index_node *node, const char *name); void mailbox_list_index_reset(struct mailbox_list_index *ilist); -int mailbox_list_index_read(struct mailbox_list_index *ilist, - struct mail_index_view *view, bool force); +int mailbox_list_index_parse(struct mailbox_list_index *ilist, + struct mail_index_view *view, bool force); int mailbox_list_index_sync(struct mailbox_list *list); struct mailbox_list_iterate_context *