dovecot: If file is lost, don't try to look for it until stack o...

dovecot at dovecot.org dovecot at dovecot.org
Wed Dec 5 17:47:52 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/ad16a4582033
changeset: 6933:ad16a4582033
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Dec 05 17:06:37 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 90b63ce0c6a5 -r ad16a4582033 src/lib-storage/index/maildir/maildir-sync.c
--- a/src/lib-storage/index/maildir/maildir-sync.c	Wed Dec 05 11:58:56 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-sync.c	Wed Dec 05 17:06:37 2007 +0200
@@ -827,8 +827,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 90b63ce0c6a5 -r ad16a4582033 src/lib-storage/index/maildir/maildir-uidlist.c
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Wed Dec 05 11:58:56 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Wed Dec 05 17:06:37 2007 +0200
@@ -740,11 +740,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->fd != -1 || uidlist->mbox == NULL)
 			return NULL;
 
@@ -753,10 +752,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 90b63ce0c6a5 -r ad16a4582033 src/lib-storage/index/maildir/maildir-uidlist.h
--- a/src/lib-storage/index/maildir/maildir-uidlist.h	Wed Dec 05 11:58:56 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.h	Wed Dec 05 17:06:37 2007 +0200
@@ -57,6 +57,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 extension's value or NULL if it doesn't exist. */
 const char *
 maildir_uidlist_lookup_ext(struct maildir_uidlist *uidlist, uint32_t uid,


More information about the dovecot-cvs mailing list