[PATCH 01/13] Correctly truncate cache file on aborted append
Wesley Craig
wes at umich.edu
Wed Jan 28 19:36:29 EST 2009
Looks fine. Is this an open bugzilla? I recall you reporting the
problem.
:wes
On 27 Jan 2009, at 23:15, Bron Gondwana wrote:
> We were truncating to the size of the mmaped area rather than the
> length of the file, causing blocks of bogus zero bytes in the
> resulting cache file after an aborted append.
>
> ===================================================================
> ---
> imap/append.c | 6 ++++--
> imap/append.h | 2 +-
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/imap/append.c b/imap/append.c
> index cb4025b..8f06896 100644
> --- a/imap/append.c
> +++ b/imap/append.c
> @@ -234,8 +234,10 @@ int append_setup(struct appendstate *as, const
> char *name,
> as->userid[0] = '\0';
> }
>
> + /* store original size to truncate if append is aborted */
> + as->orig_cache_size = as->m.cache_size;
> +
> /* zero out metadata */
> - as->orig_cache_len = as->m.cache_len;
> as->nummsg = as->numanswered =
> as->numdeleted = as->numflagged = 0;
> as->quota_used = 0;
> @@ -369,7 +371,7 @@ int append_abort(struct appendstate *as)
> }
>
> /* truncate the cache */
> - ftruncate(as->m.cache_fd, as->orig_cache_len);
> + ftruncate(as->m.cache_fd, as->orig_cache_size);
>
> /* unlock mailbox */
> mailbox_unlock_index(&as->m);
> diff --git a/imap/append.h b/imap/append.h
> index 81d1cb6..ec726bb 100644
> --- a/imap/append.h
> +++ b/imap/append.h
> @@ -76,7 +76,7 @@ struct appendstate {
> /* current state of append */
>
> /* if we abort, where should we truncate the cache file? */
> - unsigned long orig_cache_len;
> + unsigned long orig_cache_size;
>
> int writeheader; /* did we change the mailbox header? */
>
> --
> 1.5.6.3
More information about the Cyrus-devel
mailing list