diff --git a/src/cpu-profiler.cc b/src/cpu-profiler.cc index 68a565c73a..8bd3e4d828 100644 --- a/src/cpu-profiler.cc +++ b/src/cpu-profiler.cc @@ -20,17 +20,16 @@ namespace internal { static const int kProfilerStackSize = 64 * KB; -ProfilerEventsProcessor::ProfilerEventsProcessor( - ProfileGenerator* generator, - Sampler* sampler, - base::TimeDelta period) +ProfilerEventsProcessor::ProfilerEventsProcessor(ProfileGenerator* generator, + Sampler* sampler, + base::TimeDelta period) : Thread(Thread::Options("v8:ProfEvntProc", kProfilerStackSize)), generator_(generator), sampler_(sampler), - running_(true), + running_(1), period_(period), - last_code_event_id_(0), last_processed_code_event_id_(0) { -} + last_code_event_id_(0), + last_processed_code_event_id_(0) {} void ProfilerEventsProcessor::Enqueue(const CodeEventsContainer& event) { @@ -55,8 +54,7 @@ void ProfilerEventsProcessor::AddCurrentStack(Isolate* isolate) { void ProfilerEventsProcessor::StopSynchronously() { - if (!running_) return; - running_ = false; + if (!base::NoBarrier_AtomicExchange(&running_, 0)) return; Join(); } @@ -107,7 +105,7 @@ ProfilerEventsProcessor::SampleProcessingResult void ProfilerEventsProcessor::Run() { - while (running_) { + while (!!base::NoBarrier_Load(&running_)) { base::ElapsedTimer timer; timer.Start(); // Keep processing existing events until we need to do next sample. diff --git a/src/cpu-profiler.h b/src/cpu-profiler.h index c1e75a101a..4dc5643aa1 100644 --- a/src/cpu-profiler.h +++ b/src/cpu-profiler.h @@ -132,7 +132,7 @@ class ProfilerEventsProcessor : public base::Thread { // Thread control. virtual void Run(); void StopSynchronously(); - INLINE(bool running()) { return running_; } + INLINE(bool running()) { return !!base::NoBarrier_Load(&running_); } void Enqueue(const CodeEventsContainer& event); // Puts current stack into tick sample events buffer. @@ -163,7 +163,7 @@ class ProfilerEventsProcessor : public base::Thread { ProfileGenerator* generator_; Sampler* sampler_; - bool running_; + base::Atomic32 running_; // Sampling period in microseconds. const base::TimeDelta period_; UnboundQueue events_buffer_;