| 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
|
|
|