dovecot: If we're doing a fast sync, try only once to lock uidlist.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Dec 1 09:51:47 EET 2007
details: http://hg.dovecot.org/dovecot/rev/b1554dea8ee8
changeset: 6881:b1554dea8ee8
user: Timo Sirainen <tss at iki.fi>
date: Sat Dec 01 09:48:19 2007 +0200
description:
If we're doing a fast sync, try only once to lock uidlist.
diffstat:
3 files changed, 14 insertions(+), 5 deletions(-)
src/lib-storage/index/maildir/maildir-sync.c | 11 ++++++++---
src/lib-storage/index/maildir/maildir-uidlist.c | 5 ++++-
src/lib-storage/index/maildir/maildir-uidlist.h | 3 ++-
diffs (89 lines):
diff -r 724c8f12eed2 -r b1554dea8ee8 src/lib-storage/index/maildir/maildir-sync.c
--- a/src/lib-storage/index/maildir/maildir-sync.c Sat Dec 01 09:23:21 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-sync.c Sat Dec 01 09:48:19 2007 +0200
@@ -209,6 +209,7 @@ struct maildir_sync_context {
struct maildir_mailbox *mbox;
const char *new_dir, *cur_dir;
+ enum mailbox_sync_flags flags;
time_t last_touch, last_notify;
struct maildir_uidlist_sync_ctx *uidlist_sync_ctx;
@@ -246,7 +247,8 @@ void maildir_sync_notify(struct maildir_
}
static struct maildir_sync_context *
-maildir_sync_context_new(struct maildir_mailbox *mbox)
+maildir_sync_context_new(struct maildir_mailbox *mbox,
+ enum mailbox_sync_flags flags)
{
struct maildir_sync_context *ctx;
@@ -256,6 +258,7 @@ maildir_sync_context_new(struct maildir_
ctx->cur_dir = t_strconcat(mbox->path, "/cur", NULL);
ctx->last_touch = ioloop_time;
ctx->last_notify = ioloop_time;
+ ctx->flags = flags;
return ctx;
}
@@ -764,6 +767,8 @@ static int maildir_sync_context(struct m
} else {
ctx->partial = FALSE;
sync_flags = 0;
+ if ((ctx->flags & MAILBOX_SYNC_FLAG_FAST) != 0)
+ sync_flags |= MAILDIR_UIDLIST_SYNC_TRYLOCK;
}
ret = maildir_uidlist_sync_init(ctx->mbox->uidlist, sync_flags,
&ctx->uidlist_sync_ctx);
@@ -832,7 +837,7 @@ int maildir_storage_sync_force(struct ma
bool lost_files;
int ret;
- ctx = maildir_sync_context_new(mbox);
+ ctx = maildir_sync_context_new(mbox, 0);
ret = maildir_sync_context(ctx, TRUE, &lost_files);
maildir_sync_deinit(ctx);
return ret;
@@ -854,7 +859,7 @@ maildir_storage_sync_init(struct mailbox
ioloop_time) {
mbox->ibox.sync_last_check = ioloop_time;
- ctx = maildir_sync_context_new(mbox);
+ ctx = maildir_sync_context_new(mbox, flags);
ret = maildir_sync_context(ctx, FALSE, &lost_files);
maildir_sync_deinit(ctx);
diff -r 724c8f12eed2 -r b1554dea8ee8 src/lib-storage/index/maildir/maildir-uidlist.c
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Sat Dec 01 09:23:21 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c Sat Dec 01 09:48:19 2007 +0200
@@ -1068,12 +1068,15 @@ int maildir_uidlist_sync_init(struct mai
struct maildir_uidlist_sync_ctx *ctx;
int ret;
- if ((sync_flags & MAILDIR_UIDLIST_SYNC_FORCE) == 0) {
+ if ((sync_flags & (MAILDIR_UIDLIST_SYNC_TRYLOCK |
+ MAILDIR_UIDLIST_SYNC_FORCE)) == 0) {
if ((ret = maildir_uidlist_lock(uidlist)) <= 0)
return ret;
} else {
if ((ret = maildir_uidlist_try_lock(uidlist)) < 0)
return -1;
+ if (ret == 0 && (sync_flags & MAILDIR_UIDLIST_SYNC_FORCE) == 0)
+ return 0;
}
*sync_ctx_r = ctx = i_new(struct maildir_uidlist_sync_ctx, 1);
diff -r 724c8f12eed2 -r b1554dea8ee8 src/lib-storage/index/maildir/maildir-uidlist.h
--- a/src/lib-storage/index/maildir/maildir-uidlist.h Sat Dec 01 09:23:21 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.h Sat Dec 01 09:48:19 2007 +0200
@@ -10,7 +10,8 @@ enum maildir_uidlist_sync_flags {
enum maildir_uidlist_sync_flags {
MAILDIR_UIDLIST_SYNC_PARTIAL = 0x01,
MAILDIR_UIDLIST_SYNC_KEEP_STATE = 0x02,
- MAILDIR_UIDLIST_SYNC_FORCE = 0x04
+ MAILDIR_UIDLIST_SYNC_FORCE = 0x04,
+ MAILDIR_UIDLIST_SYNC_TRYLOCK = 0x08
};
enum maildir_uidlist_rec_flag {
More information about the dovecot-cvs
mailing list