[dovecot-cvs] dovecot: mail_transaction_log_move_to_memory() can't fail anymor...

dovecot at dovecot.org dovecot at dovecot.org
Wed Jun 13 19:49:56 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/dcf5dbb6a76a
changeset: 5714:dcf5dbb6a76a
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Jun 13 19:45:29 2007 +0300
description:
mail_transaction_log_move_to_memory() can't fail anymore. Moved the code to
-log-file.c.

diffstat:

5 files changed, 49 insertions(+), 47 deletions(-)
src/lib-index/mail-index.c                   |    7 +---
src/lib-index/mail-transaction-log-file.c    |   41 ++++++++++++++++++++++++--
src/lib-index/mail-transaction-log-private.h |    4 +-
src/lib-index/mail-transaction-log.c         |   40 ++-----------------------
src/lib-index/mail-transaction-log.h         |    4 +-

diffs (171 lines):

diff -r e07a4c8ad2d5 -r dcf5dbb6a76a src/lib-index/mail-index.c
--- a/src/lib-index/mail-index.c	Wed Jun 13 03:48:32 2007 +0300
+++ b/src/lib-index/mail-index.c	Wed Jun 13 19:45:29 2007 +0300
@@ -639,7 +639,6 @@ int mail_index_move_to_memory(struct mai
 int mail_index_move_to_memory(struct mail_index *index)
 {
 	struct mail_index_map *map;
-	int ret = 0;
 
 	if (MAIL_INDEX_IS_IN_MEMORY(index))
 		return index->map == NULL ? -1 : 0;
@@ -667,8 +666,7 @@ int mail_index_move_to_memory(struct mai
 
 	if (index->log != NULL) {
 		/* move transaction log to memory */
-		if (mail_transaction_log_move_to_memory(index->log) < 0)
-			ret = -1;
+		mail_transaction_log_move_to_memory(index->log);
 	}
 
 	if (index->file_lock != NULL)
@@ -678,8 +676,7 @@ int mail_index_move_to_memory(struct mai
 	if (close(index->fd) < 0)
 		mail_index_set_syscall_error(index, "close()");
 	index->fd = -1;
-
-	return ret;
+	return 0;
 }
 
 void mail_index_mark_corrupted(struct mail_index *index)
diff -r e07a4c8ad2d5 -r dcf5dbb6a76a src/lib-index/mail-transaction-log-file.c
--- a/src/lib-index/mail-transaction-log-file.c	Wed Jun 13 03:48:32 2007 +0300
+++ b/src/lib-index/mail-transaction-log-file.c	Wed Jun 13 19:45:29 2007 +0300
@@ -742,8 +742,9 @@ mail_transaction_log_file_sync(struct ma
 	return 0;
 }
 
-int mail_transaction_log_file_read(struct mail_transaction_log_file *file,
-				   uoff_t offset)
+static int
+mail_transaction_log_file_read(struct mail_transaction_log_file *file,
+			       uoff_t offset)
 {
 	void *data;
 	size_t size;
@@ -953,3 +954,39 @@ int mail_transaction_log_file_map(struct
 
 	return 1;
 }
+
+void mail_transaction_log_file_move_to_memory(struct mail_transaction_log_file
+					      *file)
+{
+	buffer_t *buf;
+
+	if (MAIL_TRANSACTION_LOG_FILE_IN_MEMORY(file))
+		return;
+
+	if (file->mmap_base != NULL) {
+		/* just copy to memory */
+		i_assert(file->buffer_offset == 0);
+
+		buf = buffer_create_dynamic(default_pool, file->mmap_size);
+		buffer_append(buf, file->mmap_base, file->mmap_size);
+		buffer_free(file->buffer);
+		file->buffer = buf;
+
+		/* and lose the mmap */
+		if (munmap(file->mmap_base, file->mmap_size) < 0) {
+			mail_index_file_set_syscall_error(file->log->index,
+							  file->filepath,
+							  "munmap()");
+		}
+		file->mmap_base = NULL;
+	} else if (file->buffer_offset != 0) {
+		/* we don't have the full log in the memory. read it. */
+		(void)mail_transaction_log_file_read(file, 0);
+	}
+
+	if (close(file->fd) < 0) {
+		mail_index_file_set_syscall_error(file->log->index,
+						  file->filepath, "close()");
+	}
+	file->fd = -1;
+}
diff -r e07a4c8ad2d5 -r dcf5dbb6a76a src/lib-index/mail-transaction-log-private.h
--- a/src/lib-index/mail-transaction-log-private.h	Wed Jun 13 03:48:32 2007 +0300
+++ b/src/lib-index/mail-transaction-log-private.h	Wed Jun 13 19:45:29 2007 +0300
@@ -90,8 +90,6 @@ int mail_transaction_log_file_open(struc
 int mail_transaction_log_file_open(struct mail_transaction_log_file *file,
 				   bool check_existing);
 int mail_transaction_log_file_create(struct mail_transaction_log_file *file);
-int mail_transaction_log_file_read(struct mail_transaction_log_file *file,
-				   uoff_t offset);
 int mail_transaction_log_file_lock(struct mail_transaction_log_file *file);
 
 int mail_transaction_log_find_file(struct mail_transaction_log *log,
@@ -100,6 +98,8 @@ int mail_transaction_log_find_file(struc
 
 int mail_transaction_log_file_map(struct mail_transaction_log_file *file,
 				  uoff_t start_offset, uoff_t end_offset);
+void mail_transaction_log_file_move_to_memory(struct mail_transaction_log_file
+					      *file);
 
 void mail_transaction_logs_clean(struct mail_transaction_log *log);
 
diff -r e07a4c8ad2d5 -r dcf5dbb6a76a src/lib-index/mail-transaction-log.c
--- a/src/lib-index/mail-transaction-log.c	Wed Jun 13 03:48:32 2007 +0300
+++ b/src/lib-index/mail-transaction-log.c	Wed Jun 13 19:45:29 2007 +0300
@@ -131,42 +131,10 @@ void mail_transaction_log_free(struct ma
 	i_free(log);
 }
 
-int mail_transaction_log_move_to_memory(struct mail_transaction_log *log)
-{
-	struct mail_transaction_log_file *file = log->head;
-
-	if (file == NULL || MAIL_TRANSACTION_LOG_FILE_IN_MEMORY(file))
-		return 0;
-
-	/* read the whole file to memory. we might currently be appending
-	   data into it, so we want to read it up to end of file */
-        file->buffer_offset = 0;
-
-	if (file->buffer != NULL) {
-		buffer_free(file->buffer);
-		file->buffer = NULL;
-	}
-
-	if (file->mmap_base != NULL) {
-		if (munmap(file->mmap_base, file->mmap_size) < 0) {
-			mail_index_file_set_syscall_error(file->log->index,
-							  file->filepath,
-							  "munmap()");
-		}
-		file->mmap_base = NULL;
-	}
-
-	if (mail_transaction_log_file_read(file, 0) <= 0)
-		return -1;
-
-	/* after we've read the file into memory, make it into in-memory
-	   log file */
-	if (close(file->fd) < 0) {
-		mail_index_file_set_syscall_error(file->log->index,
-						  file->filepath, "close()");
-	}
-	file->fd = -1;
-	return 0;
+void mail_transaction_log_move_to_memory(struct mail_transaction_log *log)
+{
+	if (log->head != NULL)
+		mail_transaction_log_file_move_to_memory(log->head);
 }
 
 void mail_transaction_logs_clean(struct mail_transaction_log *log)
diff -r e07a4c8ad2d5 -r dcf5dbb6a76a src/lib-index/mail-transaction-log.h
--- a/src/lib-index/mail-transaction-log.h	Wed Jun 13 03:48:32 2007 +0300
+++ b/src/lib-index/mail-transaction-log.h	Wed Jun 13 19:45:29 2007 +0300
@@ -191,8 +191,8 @@ bool mail_transaction_log_is_head_prev(s
 bool mail_transaction_log_is_head_prev(struct mail_transaction_log *log,
 				       uint32_t file_seq, uoff_t file_offset);
 
-/* Move currently opened log files to memory (called by
+/* Move currently opened log head file to memory (called by
    mail_index_move_to_memory()) */
-int mail_transaction_log_move_to_memory(struct mail_transaction_log *log);
+void mail_transaction_log_move_to_memory(struct mail_transaction_log *log);
 
 #endif


More information about the dovecot-cvs mailing list