dovecot: Free mail before committing index sync to avoid crashes...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Dec 29 07:22:42 EET 2007
details: http://hg.dovecot.org/dovecot/rev/72122918288c
changeset: 7060:72122918288c
user: Timo Sirainen <tss at iki.fi>
date: Sat Dec 29 07:22:38 2007 +0200
description:
Free mail before committing index sync to avoid crashes when updating cache
file.
diffstat:
1 file changed, 8 insertions(+), 3 deletions(-)
src/lib-storage/index/maildir/maildir-save.c | 11 ++++++++---
diffs (30 lines):
diff -r 0a0ff276bc38 -r 72122918288c src/lib-storage/index/maildir/maildir-save.c
--- a/src/lib-storage/index/maildir/maildir-save.c Sat Dec 29 07:18:44 2007 +0200
+++ b/src/lib-storage/index/maildir/maildir-save.c Sat Dec 29 07:22:38 2007 +0200
@@ -693,8 +693,16 @@ int maildir_transaction_save_commit_pre(
*t->ictx.saved_uid_validity =
maildir_uidlist_get_uid_validity(ctx->mbox->uidlist);
+ if (ctx->mail != NULL) {
+ /* Mail freeing may trigger cache updates and a call to
+ maildir_save_file_get_path(). Do this before finishing index
+ sync so we still have keywords_sync_ctx. */
+ mail_free(&ctx->mail);
+ }
+
if (sync_commit) {
/* It doesn't matter if index syncing fails */
+ ctx->keywords_sync_ctx = NULL;
(void)maildir_sync_index_finish(&ctx->sync_ctx,
ret < 0, !sync_commit);
}
@@ -715,9 +723,6 @@ int maildir_transaction_save_commit_pre(
maildir_transaction_save_rollback(ctx);
return -1;
}
-
- if (ctx->mail != NULL)
- mail_free(&ctx->mail);
return ret;
}
More information about the dovecot-cvs
mailing list