Mercurial > dovecot > core-2.2
changeset 5714:dcf5dbb6a76a HEAD
mail_transaction_log_move_to_memory() can't fail anymore. Moved the code to
-log-file.c.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 13 Jun 2007 19:45:29 +0300 |
parents | e07a4c8ad2d5 |
children | 11d39b7f07ff |
files | src/lib-index/mail-index.c src/lib-index/mail-transaction-log-file.c src/lib-index/mail-transaction-log-private.h src/lib-index/mail-transaction-log.c src/lib-index/mail-transaction-log.h |
diffstat | 5 files changed, 48 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- 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 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 @@ 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 @@ 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)
--- 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 @@ 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 @@ 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; +}
--- 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(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_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);
--- 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 @@ i_free(log); } -int mail_transaction_log_move_to_memory(struct mail_transaction_log *log) +void 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; + if (log->head != NULL) + mail_transaction_log_file_move_to_memory(log->head); } void mail_transaction_logs_clean(struct mail_transaction_log *log)
--- 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(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