[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