# OS dependent configuration
SET_ENV_LIBRARY_PATH=no
ENV_LIBRARY_PATH=LD_LIBRARY_PATH
+bind10_undefined_pthread_behavior=no
case "$host" in
*-solaris*)
# Destroying locked mutexes, condition variables being waited
# on, etc. are undefined behavior on Solaris, so we set it as
# such here.
- AC_DEFINE([HAS_UNDEFINED_PTHREAD_BEHAVIOR], [1], [Does this platform have some undefined pthreads behavior?])
+ bind10_undefined_pthread_behavior=yes
;;
*-apple-darwin*)
# Starting with OSX 10.7 (Lion) we must choose which IPv6 API to use
# (RFC2292 or RFC3542).
CPPFLAGS="$CPPFLAGS -D__APPLE_USE_RFC_3542"
+ # In OS X 10.9 (and possibly any future versions?) pthread_cond_destroy
+ # doesn't work as documented, which makes some of unit tests fail.
+ osx_version=`/usr/bin/sw_vers -productVersion`
+ if [ test $osx_version = "10.9" ]; then
+ bind10_undefined_pthread_behavior=yes
+ fi
+
# libtool doesn't work perfectly with Darwin: libtool embeds the
# final install path in dynamic libraries and our loadable python
# modules always refer to that path even if it's loaded within the
AM_CONDITIONAL(SET_ENV_LIBRARY_PATH, test $SET_ENV_LIBRARY_PATH = yes)
AC_SUBST(SET_ENV_LIBRARY_PATH)
AC_SUBST(ENV_LIBRARY_PATH)
+if [ test $bind10_undefined_pthread_behavior = "yes" ]; then
+ AC_DEFINE([HAS_UNDEFINED_PTHREAD_BEHAVIOR], [1], [Does this platform have some undefined pthreads behavior?])
+fi
# Our experiments have shown Solaris 10 has broken support for the
# IPV6_USE_MIN_MTU socket option for getsockopt(); it doesn't return the value
condvar->wait(*mutex);
}
-#ifndef HAS_UNDEFINED_PTHREAD_BEHAVIOR
-TEST_F(CondVarTest, destroyWhileWait) {
+TEST_F(CondVarTest,
+#ifdef HAS_UNDEFINED_PTHREAD_BEHAVIOR
+ DISABLED_destroyWhileWait
+#else
+ destroyWhileWait
+#endif
+) {
// We'll destroy a CondVar object while the thread is still waiting
// on it. This will trigger an assertion failure.
if (!isc::util::unittests::runningOnValgrind()) {
}, "");
}
}
-#endif // !HAS_UNDEFINED_PTHREAD_BEHAVIOR
#ifdef ENABLE_DEBUG
#endif // ENABLE_DEBUG
-#ifndef HAS_UNDEFINED_PTHREAD_BEHAVIOR
// Destroying a locked mutex is a bad idea as well
-TEST(MutexTest, destroyLocked) {
+TEST(MutexTest,
+#ifdef HAS_UNDEFINED_PTHREAD_BEHAVIOR
+ DISABLED_destroyLocked
+#else
+ destroyLocked
+#endif
+) {
if (!isc::util::unittests::runningOnValgrind()) {
EXPECT_DEATH_IF_SUPPORTED({
Mutex* mutex = new Mutex;
}, "");
}
}
-#endif // !HAS_UNDEFINED_PTHREAD_BEHAVIOR
// In this test, we try to check if a mutex really locks. We could try that
// with a deadlock, but that's not practical (the test would not end).