| Index: vm/store_buffer.cc
|
| ===================================================================
|
| --- vm/store_buffer.cc (revision 9784)
|
| +++ vm/store_buffer.cc (working copy)
|
| @@ -44,24 +44,34 @@
|
| DedupSet* current = dedup_sets_;
|
| dedup_sets_ = NULL;
|
| while (current != NULL) {
|
| - DedupSet* next = current->next_;
|
| + DedupSet* next = current->next();
|
| delete current;
|
| current = next;
|
| }
|
| }
|
|
|
|
|
| +void StoreBuffer::Reset() {
|
| + DedupSet* current = DedupSets();
|
| + while (current != NULL) {
|
| + DedupSet* next = current->next();
|
| + delete current;
|
| + current = next;
|
| + }
|
| +}
|
| +
|
| +
|
| void StoreBuffer::AddPointer(uword address) {
|
| ASSERT(dedup_sets_ != NULL);
|
| - if (!dedup_sets_->set_->Add(address)) {
|
| - // TODO(iposva): Limit growth of deduplication sets until the rest of the
|
| - // mechanism is hooked up.
|
| - delete dedup_sets_;
|
| - dedup_sets_ = NULL;
|
| -
|
| - DedupSet* fresh_element = new DedupSet();
|
| - fresh_element->next_ = dedup_sets_;
|
| - dedup_sets_ = fresh_element;
|
| + if (!dedup_sets_->set()->Add(address)) {
|
| + // Add a new DedupSet. Schedule an interrupt if we have run over the max
|
| + // number of DedupSets.
|
| + dedup_sets_ = new DedupSet(dedup_sets_);
|
| + count_++;
|
| + // TODO(iposva): Fix magic number.
|
| + if (count_ > 100) {
|
| + Isolate::Current()->ScheduleInterrupts(Isolate::kStoreBufferInterrupt);
|
| + }
|
| }
|
| }
|
|
|
|
|