Chromium Code Reviews| Index: runtime/vm/scavenger.h |
| diff --git a/runtime/vm/scavenger.h b/runtime/vm/scavenger.h |
| index 7fa3950f701eb2847e9356e43f952552e8f01699..9bddadaec4053fca62ce78feda384fcacfc8f67d 100644 |
| --- a/runtime/vm/scavenger.h |
| +++ b/runtime/vm/scavenger.h |
| @@ -124,11 +124,17 @@ class Scavenger { |
| uword TryAllocate(intptr_t size) { |
| ASSERT(Utils::IsAligned(size, kObjectAlignment)); |
| ASSERT(heap_ != Dart::vm_isolate()->heap()); |
| + |
| #if defined(DEBUG) |
| if (FLAG_gc_at_alloc && !scavenging_) { |
| Scavenge(); |
| + ASSERT(Isolate::Current()->mutator_thread()->top() == top_); |
|
rmacnak
2017/06/22 22:31:51
Thread::Current() should be the mutator
danunez
2017/06/30 20:35:57
Done.
|
| } |
| #endif |
| + |
| + top_ = Isolate::Current()->mutator_thread()->top(); |
| + ASSERT(Isolate::Current()->mutator_thread()->end() == end_); |
| + |
| uword result = top_; |
| intptr_t remaining = end_ - top_; |
| if (remaining < size) { |
| @@ -139,6 +145,7 @@ class Scavenger { |
| top_ += size; |
| ASSERT(to_->Contains(top_) || (top_ == to_->end())); |
| + Isolate::Current()->mutator_thread()->set_top_offset(top_); |
| return result; |
| } |
| @@ -234,6 +241,7 @@ class Scavenger { |
| void PushToPromotedStack(uword addr) { |
| ASSERT(scavenging_); |
| end_ -= sizeof(addr); |
| + Isolate::Current()->mutator_thread()->set_end_offset(end_); |
| ASSERT(end_ > top_); |
| *reinterpret_cast<uword*>(end_) = addr; |
| } |
| @@ -241,6 +249,7 @@ class Scavenger { |
| ASSERT(scavenging_); |
| uword result = *reinterpret_cast<uword*>(end_); |
| end_ += sizeof(result); |
| + Isolate::Current()->mutator_thread()->set_end_offset(end_); |
| ASSERT(end_ <= to_->end()); |
| return result; |
| } |
| @@ -295,6 +304,8 @@ class Scavenger { |
| // The total size of external data associated with objects in this scavenger. |
| intptr_t external_size_; |
| + Mutex* space_lock_; |
| + |
| friend class ScavengerVisitor; |
| friend class ScavengerWeakVisitor; |