From: Aki Tuomi Date: Fri, 16 Apr 2021 07:03:33 +0000 (+0300) Subject: virtual: virtual-mail - Free up mails in virtual_mail_close if we are freeing up X-Git-Tag: 2.3.15~76 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=448330c320c6b2ec383f92c7fc61429d9cb9eef1;p=thirdparty%2Fdovecot%2Fcore.git virtual: virtual-mail - Free up mails in virtual_mail_close if we are freeing up Makes next change easier --- diff --git a/src/plugins/virtual/virtual-mail.c b/src/plugins/virtual/virtual-mail.c index 9a2eda994b..e482cec824 100644 --- a/src/plugins/virtual/virtual-mail.c +++ b/src/plugins/virtual/virtual-mail.c @@ -62,8 +62,13 @@ static void virtual_mail_close(struct mail *mail) for (i = 0; i < count; i++) { struct mail_private *p = (struct mail_private *)mails[i]; - p->v.close(mails[i]); + if (vmail->imail.freeing) + mail_free(&mails[i]); + else + p->v.close(mails[i]); } + if (vmail->imail.freeing) + array_free(&vmail->backend_mails); index_mail_close(mail); } @@ -73,10 +78,8 @@ static void virtual_mail_free(struct mail *mail) struct mail **mails; unsigned int i, count; - mails = array_get_modifiable(&vmail->backend_mails, &count); - for (i = 0; i < count; i++) - mail_free(&mails[i]); - array_free(&vmail->backend_mails); + vmail->imail.freeing = TRUE; + virtual_mail_close(mail); mail->transaction->mail_ref_count--; mailbox_header_lookup_unref(&vmail->wanted_headers);