dovecot-2.1: mailbox list indexes: Error handling fixes.
dovecot at dovecot.org
dovecot at dovecot.org
Sun Oct 2 17:40:02 EEST 2011
details: http://hg.dovecot.org/dovecot-2.1/rev/75679aca405a
changeset: 13589:75679aca405a
user: Timo Sirainen <tss at iki.fi>
date: Sun Oct 02 17:48:23 2011 +0300
description:
mailbox list indexes: Error handling fixes.
diffstat:
src/lib-storage/list/mailbox-list-index-status.c | 12 ++++++++----
src/lib-storage/list/mailbox-list-index-sync.c | 19 ++++++++++---------
src/lib-storage/list/mailbox-list-index.c | 18 ++++++++++++++----
src/lib-storage/list/mailbox-list-index.h | 5 +++--
4 files changed, 35 insertions(+), 19 deletions(-)
diffs (157 lines):
diff -r 940ddec22822 -r 75679aca405a src/lib-storage/list/mailbox-list-index-status.c
--- 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
diff -r 940ddec22822 -r 75679aca405a src/lib-storage/list/mailbox-list-index-sync.c
--- 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;
}
diff -r 940ddec22822 -r 75679aca405a src/lib-storage/list/mailbox-list-index.c
--- 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;
diff -r 940ddec22822 -r 75679aca405a src/lib-storage/list/mailbox-list-index.h
--- 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 *
More information about the dovecot-cvs
mailing list