changeset 22757:ffccd1d964b3

imapc: Fix leaking mail_index_view on delayed expunge handling Fixes: Panic: Leaked view for index (in-memory index): Opened in imapc-mailbox.c:47
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 17 Jan 2018 15:05:38 +0200
parents 1f74202e9f70
children ca2de1a90858
files src/lib-storage/index/imapc/imapc-mailbox.c src/lib-storage/index/imapc/imapc-sync.c
diffstat 2 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mailbox.c	Wed Jan 17 15:03:06 2018 +0200
+++ b/src/lib-storage/index/imapc/imapc-mailbox.c	Wed Jan 17 15:05:38 2018 +0200
@@ -110,15 +110,22 @@
 	mbox->delayed_sync_cache_trans = NULL;
 	if (mbox->delayed_sync_cache_view != NULL)
 		mail_cache_view_close(&mbox->delayed_sync_cache_view);
-	if (mbox->sync_view != NULL)
-		mail_index_view_close(&mbox->sync_view);
 
 	if (array_count(&mbox->delayed_expunged_uids) > 0) {
 		/* delayed expunges - commit them now in a separate
-		   transaction */
+		   transaction. Reopen mbox->sync_view to see changes
+		   committed in delayed_sync_trans. */
+		if (mbox->sync_view != NULL)
+			mail_index_view_close(&mbox->sync_view);
 		if (imapc_mailbox_commit_delayed_expunges(mbox) < 0)
 			ret = -1;
 	}
+
+	if (mbox->sync_view != NULL)
+		mail_index_view_close(&mbox->sync_view);
+	i_assert(mbox->delayed_sync_trans == NULL);
+	i_assert(mbox->delayed_sync_view == NULL);
+	i_assert(mbox->delayed_sync_cache_trans == NULL);
 	return ret;
 }
 
--- a/src/lib-storage/index/imapc/imapc-sync.c	Wed Jan 17 15:03:06 2018 +0200
+++ b/src/lib-storage/index/imapc/imapc-sync.c	Wed Jan 17 15:05:38 2018 +0200
@@ -563,6 +563,7 @@
 		return ret;
 	}
 
+	i_assert(mbox->sync_view == NULL);
 	i_assert(mbox->delayed_sync_trans == NULL);
 	mbox->sync_view = ctx->sync_view;
 	mbox->delayed_sync_view =