From: jochen@chromium.org Date: Thu, 9 Oct 2014 07:51:35 +0000 (+0000) Subject: Make Profiler::running_ atomic. X-Git-Tag: upstream/4.7.83~6477 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0fae280e4a4e51a5cea5b15020f8b40c6058e222;p=platform%2Fupstream%2Fv8.git Make Profiler::running_ atomic. It's used from multiple threads BUG=none R=yangguo@chromium.org LOG=n Review URL: https://codereview.chromium.org/640773002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24480 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/log.cc b/src/log.cc index 265895a..0af1c9f 100644 --- a/src/log.cc +++ b/src/log.cc @@ -652,7 +652,7 @@ class Profiler: public base::Thread { bool engaged_; // Tells whether worker thread should continue running. - bool running_; + base::Atomic32 running_; // Tells whether we are currently recording tick samples. bool paused_; @@ -703,9 +703,9 @@ Profiler::Profiler(Isolate* isolate) overflow_(false), buffer_semaphore_(0), engaged_(false), - running_(false), paused_(false) { base::NoBarrier_Store(&tail_, 0); + base::NoBarrier_Store(&running_, 0); } @@ -721,7 +721,7 @@ void Profiler::Engage() { } // Start thread processing the profiler buffer. - running_ = true; + base::NoBarrier_Store(&running_, 1); Start(); // Register to get ticks. @@ -741,7 +741,7 @@ void Profiler::Disengage() { // Terminate the worker thread by setting running_ to false, // inserting a fake element in the queue and then wait for // the thread to terminate. - running_ = false; + base::NoBarrier_Store(&running_, 0); TickSample sample; // Reset 'paused_' flag, otherwise semaphore may not be signalled. resume(); @@ -755,7 +755,7 @@ void Profiler::Disengage() { void Profiler::Run() { TickSample sample; bool overflow = Remove(&sample); - while (running_) { + while (base::NoBarrier_Load(&running_)) { LOG(isolate_, TickEvent(&sample, overflow)); overflow = Remove(&sample); }