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