Mercurial > dovecot > core-2.2
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 =