Mercurial > dovecot > core-2.2
changeset 8927:a48605408d18 HEAD
dbox: Fixes to saving messages.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 25 Feb 2009 12:30:36 -0500 |
parents | be17526a165d |
children | 0fc03e326ccc |
files | src/lib-storage/index/dbox/dbox-map.c src/lib-storage/index/dbox/dbox-map.h src/lib-storage/index/dbox/dbox-save.c |
diffstat | 3 files changed, 9 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/dbox/dbox-map.c Wed Feb 25 12:23:30 2009 -0500 +++ b/src/lib-storage/index/dbox/dbox-map.c Wed Feb 25 12:30:36 2009 -0500 @@ -222,9 +222,8 @@ struct dbox_storage *storage = map->storage; const struct mail_index_header *hdr; struct dbox_file *file; - struct stat st; uint32_t seq, tmp_file_id; - uoff_t tmp_offset, tmp_size; + uoff_t tmp_offset, tmp_size, new_size; bool deleted, file_too_old = FALSE; int ret; @@ -237,14 +236,9 @@ if (deleted) return TRUE; - if (fstat(file->fd, &st) < 0) { - mail_storage_set_critical(&storage->storage, - "fstat(%s) failed: %m", file->current_path); - } else if (file->create_time < stamp) + if (file->create_time < stamp) file_too_old = TRUE; - else if (st.st_size + mail_size > storage->rotate_size) { - /* file too large */ - } else if ((ret = dbox_file_try_lock(file)) <= 0) { + else if ((ret = dbox_file_try_lock(file)) <= 0) { /* locking failed */ *retry_later_r = ret == 0; } else if (dbox_map_refresh(map) == 0) { @@ -263,8 +257,9 @@ } } + new_size = last_msg_offset + last_msg_size + mail_size; if (seq > hdr->messages_count && - last_msg_offset + last_msg_size > storage->rotate_size && + new_size <= storage->rotate_size && dbox_file_get_append_stream(file, last_msg_offset, last_msg_size, output_r) > 0) { /* success */ @@ -444,7 +439,7 @@ return 0; } -void dbox_map_append_finish_mail(struct dbox_map_append_context *ctx) +void dbox_map_append_finish_multi_mail(struct dbox_map_append_context *ctx) { struct dbox_map_append *appends; unsigned int count;
--- a/src/lib-storage/index/dbox/dbox-map.h Wed Feb 25 12:23:30 2009 -0500 +++ b/src/lib-storage/index/dbox/dbox-map.h Wed Feb 25 12:30:36 2009 -0500 @@ -19,7 +19,7 @@ int dbox_map_append_next(struct dbox_map_append_context *ctx, uoff_t mail_size, struct dbox_file **file_r, struct ostream **output_r); /* Finished saving the last mail. Saves the message size. */ -void dbox_map_append_finish_mail(struct dbox_map_append_context *ctx); +void dbox_map_append_finish_multi_mail(struct dbox_map_append_context *ctx); /* Assign map UIDs to all appended msgs to multi-files. */ int dbox_map_append_assign_map_uids(struct dbox_map_append_context *ctx, uint32_t *first_map_uid_r,
--- a/src/lib-storage/index/dbox/dbox-save.c Wed Feb 25 12:23:30 2009 -0500 +++ b/src/lib-storage/index/dbox/dbox-save.c Wed Feb 25 12:30:36 2009 -0500 @@ -272,10 +272,11 @@ return -1; } - dbox_map_append_finish_mail(ctx->append_ctx); if (save_mail->file->single_mbox != NULL) { dbox_file_close(save_mail->file); ctx->single_count++; + } else { + dbox_map_append_finish_multi_mail(ctx->append_ctx); } return 0; }