summaryrefslogtreecommitdiff
path: root/tests/atlocal.in
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2014-07-11 11:03:08 -0700
committerBen Pfaff <blp@nicira.com>2014-07-11 11:03:08 -0700
commitb6137ea8dd85358dffe59476df667e4460d21fca (patch)
tree2a06b5e6a021078a05204f97a01a5201d77fdabb /tests/atlocal.in
parent62974663fe9711d4c143fe192985ec7a17982c37 (diff)
downloadopenvswitch-b6137ea8dd85358dffe59476df667e4460d21fca.tar.gz
tests: Disable glibc memory checking under glibc <= 2.11.
We noticed that the unit tests sometimes fail on XenServer inside glibc's memory checker, in the free_check() function. It turns out that the glibc memory checker in glibc 2.11 and earlier had an internal race that caused false positives in multithreaded programs. This commit avoids the problem by disabling the glibc memory checker in glibc 2.11 and earlier. VMware-BZ: #1267127 Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Gurucharan Shetty <gshetty@nicira.com>
Diffstat (limited to 'tests/atlocal.in')
-rw-r--r--tests/atlocal.in22
1 files changed, 18 insertions, 4 deletions
diff --git a/tests/atlocal.in b/tests/atlocal.in
index 2f816fc12..825d28965 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -52,10 +52,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