Mercurial > dovecot > original-hg > dovecot-1.2
changeset 1387:dfa23fc2f370 HEAD
Don't call msync() with with in-memory indexes.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 23 Apr 2003 20:07:23 +0300 |
parents | 5d16da99b537 |
children | 683a8202c037 |
files | src/lib-index/mail-index-data.c src/lib-index/mail-index.c src/lib-index/mail-tree.c src/lib-index/maildir/maildir-rebuild.c src/lib-index/mbox/mbox-rebuild.c |
diffstat | 5 files changed, 41 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-data.c Wed Apr 23 19:52:10 2003 +0300 +++ b/src/lib-index/mail-index-data.c Wed Apr 23 20:07:23 2003 +0300 @@ -76,13 +76,24 @@ return FALSE; } +static int mail_index_data_msync(struct mail_index_data *data) +{ + if (!data->modified) + return TRUE; + + if (!data->anon_mmap) { + if (msync(data->mmap_base, data->mmap_used_length, MS_SYNC) < 0) + return index_data_set_syscall_error(data, "msync()"); + } + + data->modified = FALSE; + data->fsynced = FALSE; + return TRUE; +} + static void mail_index_data_file_close(struct mail_index_data *data) { - if (data->modified) { - if (msync(data->mmap_base, data->mmap_used_length, MS_SYNC) < 0) - index_data_set_syscall_error(data, "msync()"); - data->modified = FALSE; - } + (void)mail_index_data_msync(data); if (data->anon_mmap) { if (munmap_anon(data->mmap_base, data->mmap_full_length) < 0) @@ -164,11 +175,8 @@ i_assert(!data->anon_mmap); if (data->mmap_base != NULL) { - if (data->modified && - msync(data->mmap_base, data->mmap_used_length, MS_SYNC) < 0) - return index_data_set_syscall_error(data, "msync()"); - data->modified = FALSE; - data->fsynced = FALSE; + if (!mail_index_data_msync(data)) + return FALSE; if (munmap(data->mmap_base, data->mmap_full_length) < 0) index_data_set_syscall_error(data, "munmap()"); @@ -504,12 +512,8 @@ if (data->anon_mmap) return TRUE; - if (data->modified) { - if (msync(data->mmap_base, data->mmap_used_length, MS_SYNC) < 0) - return index_data_set_syscall_error(data, "msync()"); - - data->fsynced = FALSE; - } + if (!mail_index_data_msync(data)) + return FALSE; if (!data->fsynced) { data->fsynced = TRUE;
--- a/src/lib-index/mail-index.c Wed Apr 23 19:52:10 2003 +0300 +++ b/src/lib-index/mail-index.c Wed Apr 23 20:07:23 2003 +0300 @@ -261,7 +261,7 @@ static int mail_index_write_header_changes(struct mail_index *index) { - int failed; + int failed = FALSE; /* use our own locking here so we don't mess up with any other index states, like inconsistency. */ @@ -275,10 +275,13 @@ mail_index_update_header_changes(index); - failed = msync(index->mmap_base, - sizeof(struct mail_index_header), MS_SYNC) < 0; - if (failed) - index_set_syscall_error(index, "msync()"); + if (!index->anon_mmap) { + if (msync(index->mmap_base, + sizeof(struct mail_index_header), MS_SYNC) < 0) { + index_set_syscall_error(index, "msync()"); + failed = TRUE; + } + } #ifdef DEBUG mprotect(index->mmap_base, index->mmap_used_length, PROT_NONE); @@ -446,7 +449,8 @@ /* remove the FSCK flag only after successful fsync() */ if (mail_index_sync_file(index) && !keep_fsck) { index->header->flags &= ~MAIL_INDEX_FLAG_FSCK; - if (msync(index->mmap_base, + if (!index->anon_mmap && + msync(index->mmap_base, sizeof(struct mail_index_header), MS_SYNC) < 0) { /* we only failed to remove the fsck flag,
--- a/src/lib-index/mail-tree.c Wed Apr 23 19:52:10 2003 +0300 +++ b/src/lib-index/mail-tree.c Wed Apr 23 20:07:23 2003 +0300 @@ -55,7 +55,7 @@ if (tree->mmap_base != NULL) { /* make sure we're synced before munmap() */ - if (tree->modified && + if (!tree->anon_mmap && tree->modified && msync(tree->mmap_base, tree->mmap_highwater, MS_SYNC) < 0) return tree_set_syscall_error(tree, "msync()"); tree->modified = FALSE;
--- a/src/lib-index/maildir/maildir-rebuild.c Wed Apr 23 19:52:10 2003 +0300 +++ b/src/lib-index/maildir/maildir-rebuild.c Wed Apr 23 20:07:23 2003 +0300 @@ -28,9 +28,11 @@ index->inconsistent = TRUE; index->rebuilding = TRUE; - if (msync(index->mmap_base, - sizeof(struct mail_index_header), MS_SYNC) < 0) - return FALSE; + if (!index->anon_mmap) { + if (msync(index->mmap_base, + sizeof(struct mail_index_header), MS_SYNC) < 0) + return index_set_syscall_error(index, "msync()"); + } /* reset data file */ if (!mail_index_data_reset(index->data))
--- a/src/lib-index/mbox/mbox-rebuild.c Wed Apr 23 19:52:10 2003 +0300 +++ b/src/lib-index/mbox/mbox-rebuild.c Wed Apr 23 20:07:23 2003 +0300 @@ -32,9 +32,11 @@ if (index->opened) index->inconsistent = TRUE; - if (msync(index->mmap_base, - sizeof(struct mail_index_header), MS_SYNC) < 0) - return index_set_syscall_error(index, "msync()"); + if (!index->anon_mmap) { + if (msync(index->mmap_base, + sizeof(struct mail_index_header), MS_SYNC) < 0) + return index_set_syscall_error(index, "msync()"); + } /* reset data file */ if (!mail_index_data_reset(index->data))