changeset 22954:39d0d0e8eca2

fts: Make sure indexing virtual mailbox doesn't recurse and index mail multiple times
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 03 May 2018 18:30:51 +0300
parents fa8ce7d554ab
children 812e5c961328
files src/plugins/fts/fts-storage.c
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/fts/fts-storage.c	Thu May 03 15:22:09 2018 +0300
+++ b/src/plugins/fts/fts-storage.c	Thu May 03 18:30:51 2018 +0300
@@ -54,6 +54,7 @@
 	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 @@
 	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;
 }