diff options
author | jerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68> | 2001-08-16 06:49:46 +0000 |
---|---|---|
committer | jerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68> | 2001-08-16 06:49:46 +0000 |
commit | c3fb67b10591edb9bd49e90334357c9fb3274203 (patch) | |
tree | 6dca8236fe0cbeb970ddd9f67b83873293239970 /configure.in | |
parent | c4d04b74ac3a0b8a2878520f50d5992d4cf73785 (diff) | |
download | libapr-c3fb67b10591edb9bd49e90334357c9fb3274203.tar.gz |
Reorder the shared memory preferences to match what MM originally had.
This effectively backs out rbb's earlier commit which was valid then
because we weren't treating Linux as special. Now, since older versions
of Linux are safe, we should go back to the original order.
We now safeguard MAP_ANON usage to only be used with >=2.4.0 Linux kernels.
On Linux versions less than that, we will not use MAP_ANON because Linux
lies and says it has it when it doesn't. I am sure that we could fine tune
the >=2.4.0 to match the specific 2.3 version that this was fixed in.
(This may very well be a glibc issue as well...)
On Linux 2.2 (Mandrake 7.2 distro), we choose shmget.
On Linux 2.4 (Mandrake 8.0 distro), we choose mmap with MAP_ANON.
Please try out. It works here. If this needs a glibc check instead,
let me know and we can work something out.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@62172 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'configure.in')
-rw-r--r-- | configure.in | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/configure.in b/configure.in index 41e46d629..e3fd8525f 100644 --- a/configure.in +++ b/configure.in @@ -252,6 +252,9 @@ case $host in # 3.4-RELEASE: 340 4.1.1-RELEASE: 411 os_version=`uname -r | sed -e 's/\(.\)\.\(.\)\.\(.\).*/\1\2\3/' | sed -e 's/\(.\)\.\(.\)\-.*/\1\20/'` ;; + *linux*) + os_version=`uname -r | sed -e 's/\(.\)\.\(.\)\.\(.\).*/\1\2\3/'` + ;; *) os_version=OS_VERSION_IS_NOT_SET ;; @@ -405,26 +408,38 @@ AC_HAVE_HEADERS(os2.h) dnl Now we determine which one is our preference. APR_BEGIN_DECISION([shared memory allocation method]) -APR_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON, - APR_DECIDE(USE_SHMEM_MMAP_ANON, - [4.4BSD-style mmap() via MAP_ANON])) -APR_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl - func:shmget func:shmat func:shmdt func:shmctl, - APR_DECIDE(USE_SHMEM_SHMGET, [SysV IPC shmget()])) -APR_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero, - APR_DECIDE(USE_SHMEM_MMAP_ZERO, - [SVR4-style mmap() on /dev/zero])) +APR_IFALLYES(header:sys/mman.h func:mmap func:munmap, + APR_DECIDE(USE_SHMEM_MMAP_TMP, + [Classical mmap() on temporary file])) APR_IFALLYES(header:sys/mman.h func:mmap func:munmap func:shm_open dnl func:shm_unlink, APR_DECIDE(USE_SHMEM_MMAP_SHM, [mmap() via POSIX.1 shm_open() on temporary file])) -APR_IFALLYES(header:sys/mman.h func:mmap func:munmap, - APR_DECIDE(USE_SHMEM_MMAP_TMP, - [Classical mmap() on temporary file])) +APR_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero, + APR_DECIDE(USE_SHMEM_MMAP_ZERO, + [SVR4-style mmap() on /dev/zero])) +APR_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl + func:shmget func:shmat func:shmdt func:shmctl, + APR_DECIDE(USE_SHMEM_SHMGET, [SysV IPC shmget()])) +APR_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON, + APR_DECIDE(USE_SHMEM_MMAP_ANON, + [4.4BSD-style mmap() via MAP_ANON])) APR_IFALLYES(header:kernel/OS.h func:create_area, APR_DECIDE(USE_SHMEM_BEOS, [BeOS areas])) APR_IFALLYES(header:os2.h, APR_DECIDE(USE_SHMEM_OS2, [OS/2 DosAllocSharedMem()])) +case $host in + *linux* ) + dnl Linux has problems with MM_SHMT_MMANON even though it reports + dnl that it has it. + dnl FIXME - find exact 2.3 version that MMANON was fixed in. It is + dnl confirmed fixed in 2.4 series. + if test $os_version -le "240"; then + APR_DECISION_OVERRIDE(USE_SHMEM_MMAP_TMP USE_SHMEM_MMAP_SHM dnl + USE_SHMEM_MMAP_ZERO USE_SHMEM_SHMGET) + fi + ;; +esac APR_END_DECISION AC_DEFINE_UNQUOTED($ac_decision) |