mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-01 06:25:34 +00:00
[mavericks] disable some thread-related death tests on OS X 10.9
pthread_cond_destroy() doesn't meet the test's assumption. the mutext test would still pass, but this is a minor case anyway, so it's probably okay to just disable both rather introduce more macro variables.
This commit is contained in:
13
configure.ac
13
configure.ac
@@ -218,6 +218,7 @@ AC_HELP_STRING([--disable-setproctitle-check],
|
|||||||
# OS dependent configuration
|
# OS dependent configuration
|
||||||
SET_ENV_LIBRARY_PATH=no
|
SET_ENV_LIBRARY_PATH=no
|
||||||
ENV_LIBRARY_PATH=LD_LIBRARY_PATH
|
ENV_LIBRARY_PATH=LD_LIBRARY_PATH
|
||||||
|
bind10_undefined_pthread_behavior=no
|
||||||
|
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-solaris*)
|
*-solaris*)
|
||||||
@@ -229,13 +230,20 @@ case "$host" in
|
|||||||
# Destroying locked mutexes, condition variables being waited
|
# Destroying locked mutexes, condition variables being waited
|
||||||
# on, etc. are undefined behavior on Solaris, so we set it as
|
# on, etc. are undefined behavior on Solaris, so we set it as
|
||||||
# such here.
|
# such here.
|
||||||
AC_DEFINE([HAS_UNDEFINED_PTHREAD_BEHAVIOR], [1], [Does this platform have some undefined pthreads behavior?])
|
bind10_undefined_pthread_behavior=yes
|
||||||
;;
|
;;
|
||||||
*-apple-darwin*)
|
*-apple-darwin*)
|
||||||
# Starting with OSX 10.7 (Lion) we must choose which IPv6 API to use
|
# Starting with OSX 10.7 (Lion) we must choose which IPv6 API to use
|
||||||
# (RFC2292 or RFC3542).
|
# (RFC2292 or RFC3542).
|
||||||
CPPFLAGS="$CPPFLAGS -D__APPLE_USE_RFC_3542"
|
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
|
# libtool doesn't work perfectly with Darwin: libtool embeds the
|
||||||
# final install path in dynamic libraries and our loadable python
|
# final install path in dynamic libraries and our loadable python
|
||||||
# modules always refer to that path even if it's loaded within the
|
# modules always refer to that path even if it's loaded within the
|
||||||
@@ -258,6 +266,9 @@ esac
|
|||||||
AM_CONDITIONAL(SET_ENV_LIBRARY_PATH, test $SET_ENV_LIBRARY_PATH = yes)
|
AM_CONDITIONAL(SET_ENV_LIBRARY_PATH, test $SET_ENV_LIBRARY_PATH = yes)
|
||||||
AC_SUBST(SET_ENV_LIBRARY_PATH)
|
AC_SUBST(SET_ENV_LIBRARY_PATH)
|
||||||
AC_SUBST(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
|
# 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
|
# IPV6_USE_MIN_MTU socket option for getsockopt(); it doesn't return the value
|
||||||
|
@@ -142,8 +142,13 @@ signalAndWait(CondVar* condvar, Mutex* mutex) {
|
|||||||
condvar->wait(*mutex);
|
condvar->wait(*mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAS_UNDEFINED_PTHREAD_BEHAVIOR
|
TEST_F(CondVarTest,
|
||||||
TEST_F(CondVarTest, destroyWhileWait) {
|
#ifdef HAS_UNDEFINED_PTHREAD_BEHAVIOR
|
||||||
|
DISABLED_destroyWhileWait
|
||||||
|
#else
|
||||||
|
destroyWhileWait
|
||||||
|
#endif
|
||||||
|
) {
|
||||||
// We'll destroy a CondVar object while the thread is still waiting
|
// We'll destroy a CondVar object while the thread is still waiting
|
||||||
// on it. This will trigger an assertion failure.
|
// on it. This will trigger an assertion failure.
|
||||||
if (!isc::util::unittests::runningOnValgrind()) {
|
if (!isc::util::unittests::runningOnValgrind()) {
|
||||||
@@ -155,7 +160,6 @@ TEST_F(CondVarTest, destroyWhileWait) {
|
|||||||
}, "");
|
}, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // !HAS_UNDEFINED_PTHREAD_BEHAVIOR
|
|
||||||
|
|
||||||
#ifdef ENABLE_DEBUG
|
#ifdef ENABLE_DEBUG
|
||||||
|
|
||||||
|
@@ -86,9 +86,14 @@ TEST(MutexTest, lockNonBlocking) {
|
|||||||
|
|
||||||
#endif // ENABLE_DEBUG
|
#endif // ENABLE_DEBUG
|
||||||
|
|
||||||
#ifndef HAS_UNDEFINED_PTHREAD_BEHAVIOR
|
|
||||||
// Destroying a locked mutex is a bad idea as well
|
// 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()) {
|
if (!isc::util::unittests::runningOnValgrind()) {
|
||||||
EXPECT_DEATH_IF_SUPPORTED({
|
EXPECT_DEATH_IF_SUPPORTED({
|
||||||
Mutex* mutex = new Mutex;
|
Mutex* mutex = new Mutex;
|
||||||
@@ -99,7 +104,6 @@ TEST(MutexTest, destroyLocked) {
|
|||||||
}, "");
|
}, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // !HAS_UNDEFINED_PTHREAD_BEHAVIOR
|
|
||||||
|
|
||||||
// In this test, we try to check if a mutex really locks. We could try that
|
// 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).
|
// with a deadlock, but that's not practical (the test would not end).
|
||||||
|
Reference in New Issue
Block a user