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;
 }