]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Make sure indexing virtual mailbox doesn't recurse and index mail multiple times
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 3 May 2018 15:30:51 +0000 (18:30 +0300)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 11 May 2018 11:10:32 +0000 (14:10 +0300)
src/plugins/fts/fts-storage.c

index 90466e3653ac1f4c946a3ec6ebe68a1baadefba8..05497336812b5f2602d4eb15e0ef4214d500caef 100644 (file)
@@ -54,6 +54,7 @@ struct fts_transaction_context {
        uint32_t highest_virtual_uid;
        unsigned int precache_extra_count;
 
+       unsigned int indexing:1;
        unsigned int precached:1;
        unsigned int mails_saved:1;
        unsigned int failed:1;
@@ -525,8 +526,12 @@ static void fts_mail_precache(struct mail *_mail)
        if (fmail->virtual_mail) {
                if (ft->highest_virtual_uid < _mail->uid)
                        ft->highest_virtual_uid = _mail->uid;
-       } else T_BEGIN {
+       } else if (!ft->indexing) T_BEGIN {
+               /* avoid recursing here from fts_mail_precache_range() */
+               ft->indexing = TRUE;
                fts_mail_index(_mail);
+               i_assert(ft->indexing);
+               ft->indexing = FALSE;
        } T_END;
 }