Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4785:a18fa2b4bf06 HEAD
Code cleanup
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 12 Nov 2006 13:15:38 +0200 |
parents | 86b8b9e45c30 |
children | 65bbeb211a30 |
files | src/lib-index/mail-transaction-log-private.h src/lib-index/mail-transaction-log-view.c src/lib-index/mail-transaction-log.c |
diffstat | 3 files changed, 29 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-transaction-log-private.h Sun Nov 12 13:13:17 2006 +0200 +++ b/src/lib-index/mail-transaction-log-private.h Sun Nov 12 13:15:38 2006 +0200 @@ -38,9 +38,10 @@ struct mail_transaction_log { struct mail_index *index; struct mail_transaction_log_view *views; - /* head is the latest log file. tail is a linked list of older - files. head isn't part of that linked list at all (ugh) */ - struct mail_transaction_log_file *head, *tail; + /* files is a linked list of all the opened log files. the list is + sorted by the log file sequence, so that transaction views can use + them easily. head contains a pointer to the newest log file. */ + struct mail_transaction_log_file *files, *head; unsigned int dotlock_count; struct dotlock_settings dotlock_settings, new_dotlock_settings;
--- a/src/lib-index/mail-transaction-log-view.c Sun Nov 12 13:13:17 2006 +0200 +++ b/src/lib-index/mail-transaction-log-view.c Sun Nov 12 13:15:38 2006 +0200 @@ -104,10 +104,10 @@ } } - if (min_file_seq == view->log->tail->hdr.prev_file_seq && - min_file_offset == view->log->tail->hdr.prev_file_offset) { + if (min_file_seq == view->log->files->hdr.prev_file_seq && + min_file_offset == view->log->files->hdr.prev_file_offset) { /* we can skip this */ - min_file_seq = view->log->tail->hdr.file_seq; + min_file_seq = view->log->files->hdr.file_seq; min_file_offset = 0; if (min_file_seq > max_file_seq) {
--- a/src/lib-index/mail-transaction-log.c Sun Nov 12 13:13:17 2006 +0200 +++ b/src/lib-index/mail-transaction-log.c Sun Nov 12 13:15:38 2006 +0200 @@ -270,7 +270,7 @@ if (log->head != NULL) log->head->refcount--; mail_transaction_logs_clean(log); - i_assert(log->tail == NULL); + i_assert(log->files == NULL); *_log = NULL; log->index->log = NULL; @@ -280,14 +280,20 @@ static void mail_transaction_log_file_free(struct mail_transaction_log_file *file) { - int old_errno = errno; + struct mail_transaction_log_file **p; + int old_errno = errno; mail_transaction_log_file_unlock(file); + for (p = &file->log->files; *p != NULL; p = &(*p)->next) { + if (*p == file) { + *p = file->next; + break; + } + } + if (file == file->log->head) file->log->head = NULL; - if (file == file->log->tail) - file->log->tail = file->next; if (file->buffer != NULL) buffer_free(file->buffer); @@ -422,7 +428,7 @@ If we're opening head log file, make sure the sequence is larger than any existing one. */ if (head) { - for (f = file->log->tail; f != NULL; f = f->next) { + for (f = file->log->files; f != NULL; f = f->next) { if (f->hdr.file_seq >= file->hdr.file_seq) { mail_transaction_log_file_set_corrupted(file, "invalid new transaction log sequence " @@ -432,7 +438,7 @@ } } } else { - for (f = file->log->tail; f != NULL; f = f->next) { + for (f = file->log->files; f != NULL; f = f->next) { if (f->hdr.file_seq == file->hdr.file_seq) { mail_transaction_log_file_set_corrupted(file, "old transaction log already opened " @@ -629,7 +635,7 @@ } /* append to end of list. */ - for (p = &log->tail; *p != NULL; p = &(*p)->next) + for (p = &log->files; *p != NULL; p = &(*p)->next) i_assert((*p)->hdr.file_seq < file->hdr.file_seq); *p = file; } @@ -643,7 +649,7 @@ file->sync_offset = file->hdr.hdr_size; /* insert it to correct position */ - for (p = &log->tail; *p != NULL; p = &(*p)->next) { + for (p = &log->files; *p != NULL; p = &(*p)->next) { i_assert((*p)->hdr.file_seq != file->hdr.file_seq); if ((*p)->hdr.file_seq > file->hdr.file_seq) break; @@ -855,16 +861,13 @@ void mail_transaction_logs_clean(struct mail_transaction_log *log) { - struct mail_transaction_log_file **p, *next; + struct mail_transaction_log_file *file, *next; - for (p = &log->tail; *p != NULL; ) { - if ((*p)->refcount != 0) - p = &(*p)->next; - else { - next = (*p)->next; - mail_transaction_log_file_free(*p); - *p = next; - } + for (file = log->files; file != NULL; file = next) { + next = file->next; + + if (file->refcount == 0) + mail_transaction_log_file_free(file); } } @@ -984,7 +987,7 @@ return -1; } - for (file = log->tail; file != NULL; file = file->next) { + for (file = log->files; file != NULL; file = file->next) { if (file->hdr.file_seq == file_seq) { *file_r = file; return 1; @@ -1014,7 +1017,7 @@ } /* see if we have it already opened */ - for (file = log->tail; file != NULL; file = file->next) { + for (file = log->files; file != NULL; file = file->next) { if (file->st_ino == st.st_ino && CMP_DEV_T(file->st_dev, st.st_dev)) { if (close(fd) < 0)