| Index: src/profile-generator.cc
|
| diff --git a/src/profile-generator.cc b/src/profile-generator.cc
|
| index f0aaa499e72527f6a08d0cc284e7a98fd59381c0..874511e36ab14614e1d44970f14911d921aa9ed4 100644
|
| --- a/src/profile-generator.cc
|
| +++ b/src/profile-generator.cc
|
| @@ -2519,15 +2519,17 @@ void V8HeapExplorer::SetInternalReference(HeapObject* parent_obj,
|
| Object* child_obj,
|
| int field_offset) {
|
| HeapEntry* child_entry = GetEntry(child_obj);
|
| - if (child_entry != NULL) {
|
| + if (child_entry == NULL) return;
|
| + // We have to use raw_unchecked_* version because when the
|
| + // empty_fixed_array itself is being processed all its inline properties
|
| + // are invalid and the check in empty_fixed_array() function fails.
|
| + if (child_obj != heap_->raw_unchecked_empty_fixed_array()) {
|
| filler_->SetNamedReference(HeapGraphEdge::kInternal,
|
| - parent_obj,
|
| - parent_entry,
|
| + parent_obj, parent_entry,
|
| reference_name,
|
| - child_obj,
|
| - child_entry);
|
| - IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
|
| + child_obj, child_entry);
|
| }
|
| + IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
|
| }
|
|
|
|
|
| @@ -2537,15 +2539,15 @@ void V8HeapExplorer::SetInternalReference(HeapObject* parent_obj,
|
| Object* child_obj,
|
| int field_offset) {
|
| HeapEntry* child_entry = GetEntry(child_obj);
|
| - if (child_entry != NULL) {
|
| + if (child_entry == NULL) return;
|
| + // See the comment regarding raw_unchecked_* above.
|
| + if (child_obj != heap_->raw_unchecked_empty_fixed_array()) {
|
| filler_->SetNamedReference(HeapGraphEdge::kInternal,
|
| - parent_obj,
|
| - parent_entry,
|
| + parent_obj, parent_entry,
|
| collection_->names()->GetName(index),
|
| - child_obj,
|
| - child_entry);
|
| - IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
|
| + child_obj, child_entry);
|
| }
|
| + IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
|
| }
|
|
|
|
|
|
|