| Index: vm/scavenger.cc
|
| ===================================================================
|
| --- vm/scavenger.cc (revision 13085)
|
| +++ vm/scavenger.cc (working copy)
|
| @@ -499,16 +499,17 @@
|
| ScavengerVisitor* visitor) {
|
| // The fate of the weak property is determined by its key.
|
| RawObject* raw_key = raw_weak->ptr()->key_;
|
| - uword raw_addr = RawObject::ToAddr(raw_key);
|
| - uword header = *reinterpret_cast<uword*>(raw_addr);
|
| - if (!IsForwarding(header)) {
|
| - // Key is white. Delay the weak property.
|
| - visitor->DelayWeakProperty(raw_weak);
|
| - return raw_weak->Size();
|
| - } else {
|
| - // Key is gray or black. Make the weak property black.
|
| - return raw_weak->VisitPointers(visitor);
|
| + if (raw_key->IsHeapObject() && raw_key->IsNewObject()) {
|
| + uword raw_addr = RawObject::ToAddr(raw_key);
|
| + uword header = *reinterpret_cast<uword*>(raw_addr);
|
| + if (!IsForwarding(header)) {
|
| + // Key is white. Delay the weak property.
|
| + visitor->DelayWeakProperty(raw_weak);
|
| + return raw_weak->Size();
|
| + }
|
| }
|
| + // Key is gray or black. Make the weak property black.
|
| + return raw_weak->VisitPointers(visitor);
|
| }
|
|
|
|
|
|
|