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:04:16 -0700
commitb60a5e7df8bab86cc901e75aa37f5af803f1a5ce (patch)
tree8ed2ee34eb858b9dc7ad0f46057f4e62f42d7de5
parentb3148d080b368eb2159a756fef702839b0ecddfe (diff)
downloadopenvswitch-b60a5e7df8bab86cc901e75aa37f5af803f1a5ce.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 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