dovecot-1.0: If file is lost, don't try to look for it until sta...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Dec 11 20:44:30 EET 2007
details: http://hg.dovecot.org/dovecot-1.0/rev/0933929929cd
changeset: 5488:0933929929cd
user: Timo Sirainen <tss at iki.fi>
date: Tue Dec 11 20:44:26 2007 +0200
description:
If file is lost, don't try to look for it until stack overflows.
diffstat:
3 files changed, 25 insertions(+), 11 deletions(-)
src/lib-storage/index/maildir/maildir-sync.c | 4 +--
src/lib-storage/index/maildir/maildir-uidlist.c | 29 +++++++++++++++--------
src/lib-storage/index/maildir/maildir-uidlist.h | 3 ++
diffs (73 lines):
diff -r 7c83c2d9c378 -r 0933929929cd src/lib-storage/index/maildir/maildir-sync.c
--- a/src/lib-storage/index/maildir/maildir-sync.c Tue Dec 11 20:32:02 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-sync.c Tue Dec 11 20:44:26 2007 +0200
@@ -1479,8 +1479,8 @@ static int maildir_sync_context(struct m
}
if (find_uid != NULL && *find_uid != 0) {
- if (maildir_uidlist_lookup(ctx->mbox->uidlist, *find_uid,
- &flags) == NULL) {
+ if (maildir_uidlist_lookup_nosync(ctx->mbox->uidlist, *find_uid,
+ &flags) == NULL) {
/* UID is expunged */
*find_uid = 0;
} else if ((flags & MAILDIR_UIDLIST_REC_FLAG_NONSYNCED) == 0) {
diff -r 7c83c2d9c378 -r 0933929929cd src/lib-storage/index/maildir/maildir-uidlist.c
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Tue Dec 11 20:32:02 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c Tue Dec 11 20:44:26 2007 +0200
@@ -557,11 +557,10 @@ maildir_uidlist_lookup(struct maildir_ui
maildir_uidlist_lookup(struct maildir_uidlist *uidlist, uint32_t uid,
enum maildir_uidlist_rec_flag *flags_r)
{
- const struct maildir_uidlist_rec *rec;
- unsigned int idx;
-
- rec = maildir_uidlist_lookup_rec(uidlist, uid, &idx);
- if (rec == NULL) {
+ const char *fname;
+
+ fname = maildir_uidlist_lookup_nosync(uidlist, uid, flags_r);
+ if (fname == NULL) {
if (uidlist->last_mtime != 0)
return NULL;
@@ -570,10 +569,22 @@ maildir_uidlist_lookup(struct maildir_ui
return NULL;
/* try again */
- rec = maildir_uidlist_lookup_rec(uidlist, uid, &idx);
- if (rec == NULL)
- return NULL;
- }
+ fname = maildir_uidlist_lookup_nosync(uidlist, uid, flags_r);
+ }
+
+ return fname;
+}
+
+const char *
+maildir_uidlist_lookup_nosync(struct maildir_uidlist *uidlist, uint32_t uid,
+ enum maildir_uidlist_rec_flag *flags_r)
+{
+ const struct maildir_uidlist_rec *rec;
+ unsigned int idx;
+
+ rec = maildir_uidlist_lookup_rec(uidlist, uid, &idx);
+ if (rec == NULL)
+ return NULL;
*flags_r = rec->flags;
return rec->filename;
diff -r 7c83c2d9c378 -r 0933929929cd src/lib-storage/index/maildir/maildir-uidlist.h
--- a/src/lib-storage/index/maildir/maildir-uidlist.h Tue Dec 11 20:32:02 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.h Tue Dec 11 20:44:26 2007 +0200
@@ -35,6 +35,9 @@ const char *
const char *
maildir_uidlist_lookup(struct maildir_uidlist *uidlist, uint32_t uid,
enum maildir_uidlist_rec_flag *flags_r);
+const char *
+maildir_uidlist_lookup_nosync(struct maildir_uidlist *uidlist, uint32_t uid,
+ enum maildir_uidlist_rec_flag *flags_r);
/* Returns TRUE if mail with given UID is recent. */
bool maildir_uidlist_is_recent(struct maildir_uidlist *uidlist, uint32_t uid);
/* Returns number of recent messages. */
More information about the dovecot-cvs
mailing list