Index: src/runtime-profiler.cc |
=================================================================== |
--- src/runtime-profiler.cc (revision 11005) |
+++ src/runtime-profiler.cc (working copy) |
@@ -72,10 +72,10 @@ |
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; |
#endif |
@@ -406,7 +406,7 @@ |
// 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 @@ |
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 @@ |
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 |