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