tests: Disable glibc memory checking under glibc <= 2.11.
authorBen Pfaff <blp@nicira.com>
Fri, 11 Jul 2014 18:03:08 +0000 (11:03 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 11 Jul 2014 18:04:07 +0000 (11:04 -0700)
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>
tests/atlocal.in

index 60f3dbf..a3ddde4 100644 (file)
@@ -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