summaryrefslogtreecommitdiff
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
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>
-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