summaryrefslogtreecommitdiff
path: root/configure.in
diff options
context:
space:
mode:
authorjerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68>2001-08-16 06:49:46 +0000
committerjerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68>2001-08-16 06:49:46 +0000
commitc3fb67b10591edb9bd49e90334357c9fb3274203 (patch)
tree6dca8236fe0cbeb970ddd9f67b83873293239970 /configure.in
parentc4d04b74ac3a0b8a2878520f50d5992d4cf73785 (diff)
downloadlibapr-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.in39
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)