Reviewers: Sven Panne,
Description:
Make Profiler::tail_ atomic
it's used on several threads
BUG=none
[email protected]
LOG=n
Please review this at https://codereview.chromium.org/639763002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+8, -6 lines):
M src/log.cc
Index: src/log.cc
diff --git a/src/log.cc b/src/log.cc
index
1b350c4909478a2996d61755389217aafd0ab1a5..db1f3cf880e63f7a4794c39618770f81ea3b22cb
100644
--- a/src/log.cc
+++ b/src/log.cc
@@ -607,7 +607,7 @@ class Profiler: public base::Thread {
if (paused_)
return;
- if (Succ(head_) == tail_) {
+ if (Succ(head_) == static_cast<int>(base::NoBarrier_Load(&tail_))) {
overflow_ = true;
} else {
buffer_[head_] = *sample;
@@ -626,9 +626,10 @@ class Profiler: public base::Thread {
// Waits for a signal and removes profiling data.
bool Remove(TickSample* sample) {
buffer_semaphore_.Wait(); // Wait for an element.
- *sample = buffer_[tail_];
+ *sample = buffer_[base::NoBarrier_Load(&tail_)];
bool result = overflow_;
- tail_ = Succ(tail_);
+ base::NoBarrier_Store(&tail_, static_cast<base::Atomic32>(
+ Succ(base::NoBarrier_Load(&tail_))));
overflow_ = false;
return result;
}
@@ -642,7 +643,7 @@ class Profiler: public base::Thread {
static const int kBufferSize = 128;
TickSample buffer_[kBufferSize]; // Buffer storage.
int head_; // Index to the buffer head.
- int tail_; // Index to the buffer tail.
+ base::Atomic32 tail_; // Index to the buffer tail.
bool overflow_; // Tell whether a buffer overflow has occurred.
// Sempahore used for buffer synchronization.
base::Semaphore buffer_semaphore_;
@@ -699,12 +700,13 @@ Profiler::Profiler(Isolate* isolate)
: base::Thread(Options("v8:Profiler")),
isolate_(isolate),
head_(0),
- tail_(0),
overflow_(false),
buffer_semaphore_(0),
engaged_(false),
running_(false),
- paused_(false) {}
+ paused_(false) {
+ base::NoBarrier_Store(&tail_, 0);
+}
void Profiler::Engage() {
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.