# HG changeset patch # User Timo Sirainen # Date 1196867197 -7200 # Node ID ad16a4582033ab490cadbf28f2cdd7a30c14a0fc # Parent 90b63ce0c6a55c4e421a8eb761a720b927d39938 If file is lost, don't try to look for it until stack overflows. 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 @@ } 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_uidlist *uidlist, uint32_t uid, enum maildir_uidlist_rec_flag *flags_r) { - const struct maildir_uidlist_rec *rec; - unsigned int idx; + const char *fname; - rec = maildir_uidlist_lookup_rec(uidlist, uid, &idx); - if (rec == NULL) { + fname = maildir_uidlist_lookup_nosync(uidlist, uid, flags_r); + if (fname == NULL) { if (uidlist->fd != -1 || uidlist->mbox == NULL) return NULL; @@ -753,11 +752,23 @@ 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 * 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,