Index: src/circular-queue-inl.h |
diff --git a/src/circular-queue-inl.h b/src/circular-queue-inl.h |
index b48070ab5d24a064e4f8a91a72020e80d8f02954..88257c340a1fc9393d6522b768b34d91ec0a2c94 100644 |
--- a/src/circular-queue-inl.h |
+++ b/src/circular-queue-inl.h |
@@ -33,21 +33,20 @@ |
namespace v8 { |
namespace internal { |
- |
-void* SamplingCircularQueue::Enqueue() { |
- if (producer_pos_->enqueue_pos == producer_pos_->next_chunk_pos) { |
- if (producer_pos_->enqueue_pos == buffer_ + buffer_size_) { |
- producer_pos_->next_chunk_pos = buffer_; |
- producer_pos_->enqueue_pos = buffer_; |
- } |
- Acquire_Store(producer_pos_->next_chunk_pos, kEnqueueStarted); |
+void* SamplingCircularQueue::StartEnqueue() { |
+ MemoryBarrier(); |
+ if (Acquire_Load(producer_pos_->enqueue_pos) == kEmpty) { |
// Skip marker. |
- producer_pos_->enqueue_pos += 1; |
- producer_pos_->next_chunk_pos += chunk_size_; |
+ return producer_pos_->enqueue_pos + 1; |
} |
- void* result = producer_pos_->enqueue_pos; |
- producer_pos_->enqueue_pos += record_size_; |
- return result; |
+ return NULL; |
+} |
+ |
+ |
+void SamplingCircularQueue::FinishEnqueue() { |
+ Release_Store(producer_pos_->enqueue_pos, kFull); |
+ producer_pos_->enqueue_pos += entry_size_; |
+ WrapPositionIfNeeded(&producer_pos_->enqueue_pos); |
} |
Benedikt Meurer
2013/08/13 09:31:32
This assumes that there is always only a single pr
|