Index: src/runtime-profiler.cc |
diff --git a/src/runtime-profiler.cc b/src/runtime-profiler.cc |
index 8bd59d1de26de83a3c4cabadbdc7d181de50bac1..befab0a28dc98c075da7822cabd6789cbdacab96 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; |
@@ -405,7 +405,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(); |
} |
@@ -418,7 +418,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; |
} |
@@ -434,7 +434,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 |