Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Unified Diff: util/synchronization/semaphore_test.cc

Issue 840933004: win: port semaphore test (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@disable-clock-test-win
Patch Set: fix assertions Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: util/synchronization/semaphore_test.cc
diff --git a/util/synchronization/semaphore_test.cc b/util/synchronization/semaphore_test.cc
index 3e779574fd448214a70aa1db4c98c9b72e14f7c3..7046373936132d1b012c7742d584beb88b15854a 100644
--- a/util/synchronization/semaphore_test.cc
+++ b/util/synchronization/semaphore_test.cc
@@ -14,7 +14,9 @@
#include "util/synchronization/semaphore.h"
+#if defined(OS_POSIX)
#include <pthread.h>
+#endif // OS_POSIX
#include "gtest/gtest.h"
@@ -29,17 +31,50 @@ TEST(Semaphore, Simple) {
}
struct ThreadMainInfo {
+#if defined(OS_POSIX)
pthread_t pthread;
+#elif defined(OS_WIN)
+ HANDLE thread;
+#endif
Semaphore* semaphore;
size_t iterations;
};
-void* ThreadMain(void* argument) {
+#if defined(OS_POSIX)
+void*
+#elif defined(OS_WIN)
+DWORD WINAPI
+#endif // OS_POSIX
+ThreadMain(void* argument) {
ThreadMainInfo* info = reinterpret_cast<ThreadMainInfo*>(argument);
for (size_t iteration = 0; iteration < info->iterations; ++iteration) {
info->semaphore->Wait();
}
+#if defined(OS_POSIX)
return nullptr;
+#elif defined(OS_WIN)
+ return 0;
+#endif // OS_POSIX
+}
+
+void StartThread(ThreadMainInfo* info) {
+#if defined(OS_POSIX)
+ int rv = pthread_create(&info->pthread, nullptr, ThreadMain, info);
+ ASSERT_EQ(0, rv) << "pthread_create";
+#elif defined(OS_WIN)
+ info->thread = CreateThread(nullptr, 0, ThreadMain, info, 0, nullptr);
+ ASSERT_NE(nullptr, info->thread) << "CreateThread";
+#endif // OS_POSIX
+}
+
+void JoinThread(ThreadMainInfo* info) {
+#if defined(OS_POSIX)
+ int rv = pthread_join(info->pthread, nullptr);
+ EXPECT_EQ(0, rv) << "pthread_join";
+#elif defined(OS_WIN)
+ DWORD result = WaitForSingleObject(info->thread, INFINITE);
+ EXPECT_EQ(WAIT_OBJECT_0, result) << "WaitForSingleObject";
+#endif // OS_POSIX
}
TEST(Semaphore, Threaded) {
@@ -48,13 +83,11 @@ TEST(Semaphore, Threaded) {
info.semaphore = &semaphore;
info.iterations = 1;
- int rv = pthread_create(&info.pthread, nullptr, ThreadMain, &info);
- ASSERT_EQ(0, rv) << "pthread_create";
+ ASSERT_NO_FATAL_FAILURE(StartThread(&info));
semaphore.Signal();
- rv = pthread_join(info.pthread, nullptr);
- ASSERT_EQ(0, rv) << "pthread_join";
+ JoinThread(&info);
}
TEST(Semaphore, TenThreaded) {
@@ -65,15 +98,12 @@ TEST(Semaphore, TenThreaded) {
const size_t kThreads = 10;
ThreadMainInfo info[kThreads];
size_t iterations = 0;
- int rv;
for (size_t index = 0; index < kThreads; ++index) {
info[index].semaphore = &semaphore;
info[index].iterations = index;
iterations += info[index].iterations;
- rv =
- pthread_create(&info[index].pthread, nullptr, ThreadMain, &info[index]);
- ASSERT_EQ(0, rv) << "pthread_create";
+ ASSERT_NO_FATAL_FAILURE(StartThread(&info[index]));
}
for (size_t iteration = 0; iteration < iterations; ++iteration) {
@@ -81,8 +111,7 @@ TEST(Semaphore, TenThreaded) {
}
for (size_t index = 0; index < kThreads; ++index) {
- rv = pthread_join(info[index].pthread, nullptr);
- ASSERT_EQ(0, rv) << "pthread_join";
+ JoinThread(&info[index]);
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698