summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/atlocal.in22
1 files changed, 18 insertions, 4 deletions
diff --git a/tests/atlocal.in b/tests/atlocal.in
index 3db626c34..5be19d966 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -37,10 +37,24 @@ fi
# Enable malloc debugging features.
case `uname` in
Linux)
- MALLOC_CHECK_=2
- MALLOC_PERTURB_=165
- export MALLOC_CHECK_
- export MALLOC_PERTURB_
+ MALLOC_PERTURB_=165; export MALLOC_PERTURB_
+
+ # Before glibc 2.11, the feature enabled by MALLOC_CHECK_ was not
+ # thread-safe. See https://bugzilla.redhat.com/show_bug.cgi?id=585674 and
+ # in particular the patch attached there, which was applied to glibc CVS as
+ # "Restore locking in free_check." between 1.11 and 1.11.1.
+ vswitchd=$abs_top_builddir/vswitchd/ovs-vswitchd
+ glibc=`ldd $vswitchd | sed -n 's/^ libc\.[^ ]* => \([^ ]*\) .*/\1/p'`
+ glibc_version=`$glibc | sed -n '1s/.*version \([0-9]\{1,\}\.[0-9]\{1,\}\).*/\1/p'`
+ case $glibc_version in
+ 2.[0-9] | 2.1[01]) mcheck=disabled ;;
+ *) mcheck=enabled ;;
+ esac
+ if test $mcheck = enabled; then
+ MALLOC_CHECK_=2; export MALLOC_CHECK_
+ else
+ echo >&2 "glibc $glibc_version detected, disabling memory checking"
+ fi
;;
FreeBSD)
case `uname -r` in