Index: src/incremental-marking.cc |
diff --git a/src/incremental-marking.cc b/src/incremental-marking.cc |
index dd54c630733f9c74905dcd7928641e9f9e0fb2f7..8fca3050577701ee5e48ccea762abd0391f97280 100644 |
--- a/src/incremental-marking.cc |
+++ b/src/incremental-marking.cc |
@@ -677,11 +677,16 @@ void IncrementalMarking::Hurry() { |
Object* context = heap_->global_contexts_list(); |
while (!context->IsUndefined()) { |
- NormalizedMapCache* cache = Context::cast(context)->normalized_map_cache(); |
- MarkBit mark_bit = Marking::MarkBitFrom(cache); |
- if (Marking::IsGrey(mark_bit)) { |
- Marking::GreyToBlack(mark_bit); |
- MemoryChunk::IncrementLiveBytes(cache->address(), cache->Size()); |
+ // GC can happen when the context is not fully initialized, |
+ // so the cache can be undefined. |
+ HeapObject* cache = HeapObject::cast( |
+ Context::cast(context)->get(Context::NORMALIZED_MAP_CACHE_INDEX)); |
+ if (!cache->IsUndefined()) { |
+ MarkBit mark_bit = Marking::MarkBitFrom(cache); |
+ if (Marking::IsGrey(mark_bit)) { |
+ Marking::GreyToBlack(mark_bit); |
+ MemoryChunk::IncrementLiveBytes(cache->address(), cache->Size()); |
+ } |
} |
context = Context::cast(context)->get(Context::NEXT_CONTEXT_LINK); |
} |