| 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());
|
| }
|
| }
|
|
|
|
|