[dovecot-cvs] dovecot/src/lib mmap-util.c, 1.11, 1.12 mmap-util.h,
1.5, 1.6 istream-mmap.c, 1.13, 1.14
cras at dovecot.org
cras at dovecot.org
Sun Aug 22 09:30:16 EEST 2004
Update of /home/cvs/dovecot/src/lib
In directory talvi:/tmp/cvs-serv31975
Modified Files:
mmap-util.c mmap-util.h istream-mmap.c
Log Message:
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.
Index: mmap-util.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/mmap-util.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- mmap-util.c 3 Oct 2003 14:50:48 -0000 1.11
+++ mmap-util.c 22 Aug 2004 06:30:13 -0000 1.12
@@ -43,3 +43,13 @@
{
}
#endif
+
+size_t mmap_get_page_size(void)
+{
+ static size_t size = 0;
+
+ if (size != 0)
+ return size;
+ size = getpagesize();
+ return size;
+}
Index: mmap-util.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/mmap-util.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mmap-util.h 3 Oct 2003 14:50:48 -0000 1.5
+++ mmap-util.h 22 Aug 2004 06:30:13 -0000 1.6
@@ -37,4 +37,6 @@
unsigned long flags);
int munmap_anon(void *start, size_t length);
+size_t mmap_get_page_size(void);
+
#endif
Index: istream-mmap.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/istream-mmap.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- istream-mmap.c 22 Aug 2004 04:00:06 -0000 1.13
+++ istream-mmap.c 22 Aug 2004 06:30:13 -0000 1.14
@@ -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)
More information about the dovecot-cvs
mailing list