[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