Mercurial > dovecot > core-2.2
changeset 2439:7d6ca38c8c37 HEAD
Added mmap_get_page_size() call which basically returns getpagesize() but
makes sure it's called only once so there's no syscall overhead every time.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 22 Aug 2004 09:30:13 +0300 |
parents | 7daa6c257a56 |
children | 0ac79623b58e |
files | src/lib/istream-mmap.c src/lib/mmap-util.c src/lib/mmap-util.h |
diffstat | 3 files changed, 21 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/istream-mmap.c Sun Aug 22 09:24:04 2004 +0300 +++ b/src/lib/istream-mmap.c Sun Aug 22 09:30:13 2004 +0300 @@ -19,7 +19,6 @@ unsigned int autoclose_fd:1; }; -static size_t mmap_pagesize = 0; static size_t mmap_pagemask = 0; static void _close(struct _iostream *stream) @@ -59,11 +58,13 @@ struct mmap_istream *mstream = (struct mmap_istream *) stream; /* allow only full page sizes */ - if (max_size < mmap_pagesize) - mstream->mmap_block_size = mmap_pagesize; + if (max_size < mmap_get_page_size()) + mstream->mmap_block_size = mmap_get_page_size(); else { - if (max_size % mmap_pagesize != 0) - max_size += mmap_pagesize - (max_size % mmap_pagesize); + if (max_size % mmap_get_page_size() != 0) { + max_size += mmap_get_page_size() - + (max_size % mmap_get_page_size()); + } mstream->mmap_block_size = max_size; } } @@ -127,7 +128,7 @@ stream->buffer = mstream->mmap_base; } - if (stream->buffer_size > mmap_pagesize) { + if (stream->buffer_size > mmap_get_page_size()) { if (madvise(mstream->mmap_base, stream->buffer_size, MADV_SEQUENTIAL) < 0) i_error("mmap_istream.madvise(): %m"); @@ -171,10 +172,8 @@ struct istream *istream; struct stat st; - if (mmap_pagesize == 0) { - mmap_pagesize = getpagesize(); - mmap_pagemask = mmap_pagesize-1; - } + if (mmap_pagemask == 0) + mmap_pagemask = mmap_get_page_size()-1; if (v_size == 0) { if (fstat(fd, &st) < 0)