From: Timo Sirainen Date: Sat, 27 Mar 2010 03:01:17 +0000 (+0200) Subject: lib-storage: If INBOX can't be opened/synced, log an error once. X-Git-Tag: 2.0.beta5~265 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c7819f72f3f9cbfa976830dc6f3190873469b901;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: If INBOX can't be opened/synced, log an error once. --HG-- branch : HEAD --- diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 7d99b9e5cc..1f5dbeb8ee 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -538,6 +538,11 @@ static int mailbox_open_full(struct mailbox *box, struct istream *input) (void)mailbox_create(box, NULL, FALSE); mailbox_close(box); ret = box->v.open(box); + if (ret < 0 && !box->storage->user->inbox_open_error_logged) { + box->storage->user->inbox_open_error_logged = TRUE; + i_error("Opening INBOX failed: %s", + mail_storage_get_last_error(box->storage, NULL)); + } } T_END; if (ret < 0) { @@ -860,11 +865,24 @@ int mailbox_sync_deinit(struct mailbox_sync_context **_ctx, struct mailbox_sync_status *status_r) { struct mailbox_sync_context *ctx = *_ctx; + struct mail_storage *storage = ctx->box->storage; + const char *errormsg; + enum mail_error error; + int ret; *_ctx = NULL; memset(status_r, 0, sizeof(*status_r)); - return ctx->box->v.sync_deinit(ctx, status_r); + ret = ctx->box->v.sync_deinit(ctx, status_r); + if (ret < 0 && ctx->box->inbox && + !storage->user->inbox_open_error_logged) { + errormsg = mail_storage_get_last_error(storage, &error); + if (error == MAIL_ERROR_NOTPOSSIBLE) { + storage->user->inbox_open_error_logged = TRUE; + i_error("Syncing INBOX failed: %s", errormsg); + } + } + return ret; } int mailbox_sync(struct mailbox *box, enum mailbox_sync_flags flags) diff --git a/src/lib-storage/mail-user.h b/src/lib-storage/mail-user.h index 2672e41609..42d576997b 100644 --- a/src/lib-storage/mail-user.h +++ b/src/lib-storage/mail-user.h @@ -45,6 +45,8 @@ struct mail_user { unsigned int initialized:1; /* Shortcut to mail_storage_settings.mail_debug */ unsigned int mail_debug:1; + /* If INBOX can't be opened, log an error, but only once. */ + unsigned int inbox_open_error_logged:1; }; struct mail_user_module_register {