Index: runtime/vm/object.h |
=================================================================== |
--- runtime/vm/object.h (revision 22392) |
+++ runtime/vm/object.h (working copy) |
@@ -440,9 +440,10 @@ |
*addr = value; |
// Filter stores based on source and target. |
if (!value->IsHeapObject()) return; |
- if (value->IsNewObject() && raw()->IsOldObject()) { |
- uword ptr = reinterpret_cast<uword>(raw()); |
- Isolate::Current()->store_buffer()->AddPointer(ptr); |
+ if (value->IsNewObject() && raw()->IsOldObject() && |
+ !raw()->IsRemembered()) { |
+ raw()->SetRememberedBit(); |
+ Isolate::Current()->store_buffer()->AddObject(raw()); |
} |
} |
@@ -4973,9 +4974,10 @@ |
*addr = value; |
// Filter stores based on source and target. |
if (!value->IsHeapObject()) return; |
- if (value->IsNewObject() && data()->IsOldObject()) { |
- uword ptr = reinterpret_cast<uword>(data()); |
- Isolate::Current()->store_buffer()->AddPointer(ptr); |
+ if (value->IsNewObject() && data()->IsOldObject() && |
+ !data()->IsRemembered()) { |
+ data()->SetRememberedBit(); |
+ Isolate::Current()->store_buffer()->AddObject(data()); |
} |
} |