Implement GetThreadCount for Linux.
This commit is contained in:
@@ -304,58 +304,51 @@ TEST(FormatCompilerIndependentFileLocationTest, FormatsUknownFileAndLine) {
|
||||
EXPECT_EQ("unknown file", FormatCompilerIndependentFileLocation(NULL, -1));
|
||||
}
|
||||
|
||||
#if GTEST_OS_MAC || GTEST_OS_QNX
|
||||
#if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_QNX
|
||||
void* ThreadFunc(void* data) {
|
||||
pthread_mutex_t* mutex = static_cast<pthread_mutex_t*>(data);
|
||||
pthread_mutex_lock(mutex);
|
||||
pthread_mutex_unlock(mutex);
|
||||
internal::Mutex* mutex = static_cast<internal::Mutex*>(data);
|
||||
mutex->Lock();
|
||||
mutex->Unlock();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
TEST(GetThreadCountTest, ReturnsCorrectValue) {
|
||||
EXPECT_EQ(1U, GetThreadCount());
|
||||
pthread_mutex_t mutex;
|
||||
pthread_attr_t attr;
|
||||
const size_t starting_count = GetThreadCount();
|
||||
pthread_t thread_id;
|
||||
|
||||
// TODO(vladl@google.com): turn mutex into internal::Mutex for automatic
|
||||
// destruction.
|
||||
pthread_mutex_init(&mutex, NULL);
|
||||
pthread_mutex_lock(&mutex);
|
||||
ASSERT_EQ(0, pthread_attr_init(&attr));
|
||||
ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE));
|
||||
internal::Mutex mutex;
|
||||
{
|
||||
internal::MutexLock lock(&mutex);
|
||||
pthread_attr_t attr;
|
||||
ASSERT_EQ(0, pthread_attr_init(&attr));
|
||||
ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE));
|
||||
|
||||
const int status = pthread_create(&thread_id, &attr, &ThreadFunc, &mutex);
|
||||
ASSERT_EQ(0, pthread_attr_destroy(&attr));
|
||||
ASSERT_EQ(0, status);
|
||||
EXPECT_EQ(2U, GetThreadCount());
|
||||
pthread_mutex_unlock(&mutex);
|
||||
const int status = pthread_create(&thread_id, &attr, &ThreadFunc, &mutex);
|
||||
ASSERT_EQ(0, pthread_attr_destroy(&attr));
|
||||
ASSERT_EQ(0, status);
|
||||
EXPECT_EQ(starting_count + 1, GetThreadCount());
|
||||
}
|
||||
|
||||
void* dummy;
|
||||
ASSERT_EQ(0, pthread_join(thread_id, &dummy));
|
||||
|
||||
# if GTEST_OS_MAC
|
||||
|
||||
// MacOS X may not immediately report the updated thread count after
|
||||
// The OS may not immediately report the updated thread count after
|
||||
// joining a thread, causing flakiness in this test. To counter that, we
|
||||
// wait for up to .5 seconds for the OS to report the correct value.
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
if (GetThreadCount() == 1)
|
||||
if (GetThreadCount() == starting_count)
|
||||
break;
|
||||
|
||||
SleepMilliseconds(100);
|
||||
}
|
||||
|
||||
# endif // GTEST_OS_MAC
|
||||
|
||||
EXPECT_EQ(1U, GetThreadCount());
|
||||
pthread_mutex_destroy(&mutex);
|
||||
EXPECT_EQ(starting_count, GetThreadCount());
|
||||
}
|
||||
#else
|
||||
TEST(GetThreadCountTest, ReturnsZeroWhenUnableToCountThreads) {
|
||||
EXPECT_EQ(0U, GetThreadCount());
|
||||
}
|
||||
#endif // GTEST_OS_MAC || GTEST_OS_QNX
|
||||
#endif // GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_QNX
|
||||
|
||||
TEST(GtestCheckDeathTest, DiesWithCorrectOutputOnFailure) {
|
||||
const bool a_false_condition = false;
|
||||
|
||||
Reference in New Issue
Block a user