2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 22:15:23 +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:
JINMEI Tatuya
2013-10-28 00:09:54 -07:00
parent f2f02dba84
commit c3cf34189e
3 changed files with 26 additions and 7 deletions

View File

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

View File

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

View File

@@ -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).