Index: src/runtime-profiler.cc |
diff --git a/src/runtime-profiler.cc b/src/runtime-profiler.cc |
index 70586aa06b26893030df2bb642af39df53018de3..bb7a7d7c64a9db85ce154c3271211a5881c33e35 100644 |
--- a/src/runtime-profiler.cc |
+++ b/src/runtime-profiler.cc |
@@ -72,9 +72,9 @@ static const int kMaxSizeEarlyOpt = 500; |
Atomic32 RuntimeProfiler::state_ = 0; |
-// TODO(isolates): Create the semaphore lazily and clean it up when no |
-// longer required. |
-Semaphore* RuntimeProfiler::semaphore_ = OS::CreateSemaphore(0); |
+ |
+// TODO(isolates): Clean up the semaphore when it is no longer required. |
+static LazySemaphore<0>::type semaphore = LAZY_SEMAPHORE_INITIALIZER; |
#ifdef DEBUG |
bool RuntimeProfiler::has_been_globally_set_up_ = false; |
@@ -406,7 +406,7 @@ void RuntimeProfiler::HandleWakeUp(Isolate* isolate) { |
// undid the decrement done by the profiler thread. Increment again |
// to get the right count of active isolates. |
NoBarrier_AtomicIncrement(&state_, 1); |
- semaphore_->Signal(); |
+ semaphore.Pointer()->Signal(); |
} |
@@ -419,7 +419,7 @@ bool RuntimeProfiler::WaitForSomeIsolateToEnterJS() { |
Atomic32 old_state = NoBarrier_CompareAndSwap(&state_, 0, -1); |
ASSERT(old_state >= -1); |
if (old_state != 0) return false; |
- semaphore_->Wait(); |
+ semaphore.Pointer()->Wait(); |
return true; |
} |
@@ -435,7 +435,7 @@ void RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(Thread* thread) { |
if (new_state == 0) { |
// The profiler thread is waiting. Wake it up. It must check for |
// stop conditions before attempting to wait again. |
- semaphore_->Signal(); |
+ semaphore.Pointer()->Signal(); |
} |
thread->Join(); |
// The profiler thread is now stopped. Undo the increment in case it |