[dovecot-cvs] dovecot/src/lib-storage/index/maildir
maildir-storage.h, 1.22, 1.23 maildir-sync.c, 1.27,
1.28 maildir-util.c, 1.5, 1.6
cras at procontrol.fi
cras at procontrol.fi
Wed Jun 16 03:53:39 EEST 2004
Update of /home/cvs/dovecot/src/lib-storage/index/maildir
In directory talvi:/tmp/cvs-serv19898
Modified Files:
maildir-storage.h maildir-sync.c maildir-util.c
Log Message:
"readonly sync" -> "forced sync"
Index: maildir-storage.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-storage.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- maildir-storage.h 6 May 2004 01:22:25 -0000 1.22
+++ maildir-storage.h 16 Jun 2004 00:53:37 -0000 1.23
@@ -39,7 +39,7 @@
maildir_mailbox_list_next(struct mailbox_list_context *ctx);
int maildir_storage_sync(struct mailbox *box, enum mailbox_sync_flags flags);
-int maildir_storage_sync_readonly(struct index_mailbox *ibox);
+int maildir_storage_sync_force(struct index_mailbox *ibox);
struct mailbox_transaction_context *
maildir_transaction_begin(struct mailbox *box, int hide);
Index: maildir-sync.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-sync.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- maildir-sync.c 14 Jun 2004 05:48:23 -0000 1.27
+++ maildir-sync.c 16 Jun 2004 00:53:37 -0000 1.28
@@ -824,15 +824,19 @@
return ret;
}
-static int maildir_sync_context(struct maildir_sync_context *ctx)
+static int maildir_sync_context(struct maildir_sync_context *ctx, int forced)
{
int ret, new_changed, cur_changed;
- if (maildir_sync_quick_check(ctx, &new_changed, &cur_changed) < 0)
- return -1;
+ if (!forced) {
+ if (maildir_sync_quick_check(ctx, &new_changed, &cur_changed) < 0)
+ return -1;
- if (!new_changed && !cur_changed)
- return 0;
+ if (!new_changed && !cur_changed)
+ return 0;
+ } else {
+ new_changed = cur_changed = TRUE;
+ }
/* we have to lock uidlist immediately, otherwise there's race
conditions with other processes who might write older maildir
@@ -840,8 +844,14 @@
alternative would be to lock it when new files are found, but
the directory scans _must_ be restarted then */
- if ((ret = maildir_uidlist_try_lock(ctx->ibox->uidlist)) <= 0)
+ if ((ret = maildir_uidlist_try_lock(ctx->ibox->uidlist)) < 0)
return ret;
+ if (ret == 0 && !forced) {
+ /* we didn't get a lock, don't do syncing unless we really
+ want to check for expunges or renames. new files won't
+ be added. */
+ return 0;
+ }
ctx->partial = !cur_changed;
ctx->uidlist_sync_ctx =
@@ -865,32 +875,13 @@
return ret;
}
-static int maildir_sync_context_readonly(struct maildir_sync_context *ctx)
-{
- int ret;
-
- ctx->uidlist_sync_ctx =
- maildir_uidlist_sync_init(ctx->ibox->uidlist, FALSE);
-
- if (maildir_scan_dir(ctx, TRUE) < 0)
- return -1;
- if (maildir_scan_dir(ctx, FALSE) < 0)
- return -1;
-
- maildir_uidlist_sync_finish(ctx->uidlist_sync_ctx);
- ret = maildir_uidlist_sync_deinit(ctx->uidlist_sync_ctx);
- ctx->uidlist_sync_ctx = NULL;
-
- return ret;
-}
-
-int maildir_storage_sync_readonly(struct index_mailbox *ibox)
+int maildir_storage_sync_force(struct index_mailbox *ibox)
{
struct maildir_sync_context *ctx;
int ret;
ctx = maildir_sync_context_new(ibox);
- ret = maildir_sync_context_readonly(ctx);
+ ret = maildir_sync_context(ctx, TRUE);
maildir_sync_deinit(ctx);
return ret;
}
@@ -906,7 +897,7 @@
ibox->sync_last_check = ioloop_time;
ctx = maildir_sync_context_new(ibox);
- ret = maildir_sync_context(ctx);
+ ret = maildir_sync_context(ctx, FALSE);
maildir_sync_deinit(ctx);
if (ret < 0)
Index: maildir-util.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-util.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- maildir-util.c 15 Jun 2004 02:12:46 -0000 1.5
+++ maildir-util.c 16 Jun 2004 00:53:37 -0000 1.6
@@ -49,7 +49,7 @@
/* file is either renamed or deleted. sync the maildir and
see which one. if file appears to be renamed constantly,
don't try to open it more than 10 times. */
- if (maildir_storage_sync_readonly(ibox) < 0)
+ if (maildir_storage_sync_force(ibox) < 0)
return -1;
ret = maildir_file_do_try(ibox, uid, func, context);
More information about the dovecot-cvs
mailing list