dovecot-2.0-sslstream: Delay initializing mailbox changelog inde...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Feb 13 02:56:24 EET 2010
details: http://hg.dovecot.org/dovecot-2.0-sslstream/rev/4267c30ded97
changeset: 10328:4267c30ded97
user: Timo Sirainen <tss at iki.fi>
date: Fri Nov 13 20:54:50 2009 -0500
description:
Delay initializing mailbox changelog index, so mbox has time to override its path.
diffstat:
1 file changed, 22 insertions(+), 10 deletions(-)
src/lib-storage/mailbox-list.c | 32 ++++++++++++++++++++++----------
diffs (70 lines):
diff -r 38941d54ec5d -r 4267c30ded97 src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c Fri Nov 13 20:52:06 2009 -0500
+++ b/src/lib-storage/mailbox-list.c Fri Nov 13 20:54:50 2009 -0500
@@ -101,7 +101,6 @@ int mailbox_list_create(const char *driv
{
const struct mailbox_list *const *class_p;
struct mailbox_list *list;
- const char *path;
unsigned int idx;
i_assert(ns->list == NULL);
@@ -167,14 +166,7 @@ int mailbox_list_create(const char *driv
list->set.inbox_path == NULL ?
"" : list->set.inbox_path);
}
-
mail_namespace_finish_list_init(ns, list);
-
- path = mailbox_list_get_path(list, NULL, MAILBOX_LIST_PATH_TYPE_INDEX);
- if (path != NULL) {
- path = t_strconcat(path, "/"MAILBOX_LOG_FILE_NAME, NULL);
- list->changelog = mailbox_log_alloc(path);
- }
if (hook_mailbox_list_created != NULL)
hook_mailbox_list_created(list);
@@ -684,13 +676,33 @@ int mailbox_list_mailbox(struct mailbox_
flags_r);
}
+static bool mailbox_list_init_changelog(struct mailbox_list *list)
+{
+ const char *path;
+
+ if (list->changelog != NULL)
+ return TRUE;
+
+ /* don't do this in mailbox_list_create(), because _get_path() might be
+ overridden by storage (mbox). */
+ path = mailbox_list_get_path(list, NULL, MAILBOX_LIST_PATH_TYPE_INDEX);
+ if (path == NULL)
+ return FALSE;
+ else {
+ path = t_strconcat(path, "/"MAILBOX_LOG_FILE_NAME, NULL);
+ list->changelog = mailbox_log_alloc(path);
+ return TRUE;
+ }
+}
+
void mailbox_list_add_change(struct mailbox_list *list,
enum mailbox_log_record_type type,
const uint8_t mailbox_guid[MAIL_GUID_128_SIZE])
{
struct mailbox_log_record rec;
- if (list->changelog == NULL || mail_guid_128_is_empty(mailbox_guid))
+ if (!mailbox_list_init_changelog(list) ||
+ mail_guid_128_is_empty(mailbox_guid))
return;
memset(&rec, 0, sizeof(rec));
@@ -906,7 +918,7 @@ int mailbox_list_get_guid(struct mailbox
struct mailbox_log *mailbox_list_get_changelog(struct mailbox_list *list)
{
- return list->changelog;
+ return !mailbox_list_init_changelog(list) ? NULL : list->changelog;
}
static int mailbox_list_try_delete(struct mailbox_list *list, const char *dir)
More information about the dovecot-cvs
mailing list