Mercurial > dovecot > core-2.2
changeset 12631:7701fb66d82a
maildir: Avoid stat()ing dovecot-shared unnecessarily.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 01 Feb 2011 21:07:27 +0200 |
parents | 82f984d7a241 |
children | 2c599f0eab69 |
files | src/lib-storage/index/maildir/maildir-storage.c |
diffstat | 1 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-storage.c Tue Feb 01 20:59:21 2011 +0200 +++ b/src/lib-storage/index/maildir/maildir-storage.c Tue Feb 01 21:07:27 2011 +0200 @@ -595,14 +595,24 @@ static enum mail_flags maildir_get_private_flags_mask(struct mailbox *box) { struct maildir_mailbox *mbox = (struct maildir_mailbox *)box; - const char *path; + const char *path, *path2; struct stat st; - if (!mbox->private_flags_mask_set) { - path = t_strconcat(mailbox_get_path(box), "/dovecot-shared", NULL); - if (stat(path, &st) < 0) - mbox->_private_flags_mask = 0; - else + if (mbox->private_flags_mask_set) + return mbox->_private_flags_mask; + mbox->private_flags_mask_set = TRUE; + + path = mailbox_list_get_path(box->list, NULL, + MAILBOX_LIST_PATH_TYPE_MAILBOX); + path2 = mailbox_list_get_path(box->list, NULL, + MAILBOX_LIST_PATH_TYPE_INDEX); + if (strcmp(path, path2) == 0) { + /* no separate index directory. we can't have private flags, + so don't even bother checking if dovecot-shared exists */ + } else { + path = t_strconcat(mailbox_get_path(box), + "/dovecot-shared", NULL); + if (stat(path, &st) == 0) mbox->_private_flags_mask = MAIL_SEEN; } return mbox->_private_flags_mask;