Index: src/base/platform/semaphore.cc |
diff --git a/src/base/platform/semaphore.cc b/src/base/platform/semaphore.cc |
index 284474e937ef3289416ba6da81888ec359d6dd76..f53df6741f56a62c991c560ae68a4289bbe74601 100644 |
--- a/src/base/platform/semaphore.cc |
+++ b/src/base/platform/semaphore.cc |
@@ -74,6 +74,13 @@ bool Semaphore::WaitFor(const TimeDelta& rel_time) { |
#elif V8_OS_POSIX |
Semaphore::Semaphore(int count) { |
+ // The sem_init() does not check for alignment of the native handle. |
+ // Unaligned native handle can later cause a failure in semaphore signal. |
+ // Check the alignment here to catch the failure earlier. |
+ // Context: crbug.com/605349. |
+ const uintptr_t kPointerAlignmentMask = sizeof(void*) - 1; |
+ CHECK_EQ( |
+ 0, reinterpret_cast<uintptr_t>(&native_handle_) & kPointerAlignmentMask); |
DCHECK(count >= 0); |
#if V8_LIBC_GLIBC |
// sem_init in glibc prior to 2.1 does not zero out semaphores. |