 Chromium Code Reviews
 Chromium Code Reviews Issue 2868103002:
  [deserializer] Make large object deserialization GC safe  (Closed)
    
  
    Issue 2868103002:
  [deserializer] Make large object deserialization GC safe  (Closed) 
  | Index: src/snapshot/deserializer.cc | 
| diff --git a/src/snapshot/deserializer.cc b/src/snapshot/deserializer.cc | 
| index 288308776663a389b968e8aca56f09fed65da150..38f41caa2727d77d33daf1d217d04a225bc3b097 100644 | 
| --- a/src/snapshot/deserializer.cc | 
| +++ b/src/snapshot/deserializer.cc | 
| @@ -54,6 +54,14 @@ void Deserializer::FlushICacheForNewCodeObjectsAndRecordEmbeddedObjects() { | 
| } | 
| } | 
| +void Deserializer::RecordWritesForLargeObjects() { | 
| + Heap* heap = isolate_->heap(); | 
| + if (!heap->incremental_marking()->black_allocation()) return; | 
| + for (HeapObject* object : deserialized_large_objects_) { | 
| + heap->incremental_marking()->IterateBlackObject(object); | 
| + } | 
| +} | 
| + | 
| bool Deserializer::ReserveSpace() { | 
| #ifdef DEBUG | 
| for (int i = NEW_SPACE; i < kNumberOfSpaces; ++i) { | 
| @@ -171,6 +179,7 @@ MaybeHandle<HeapObject> Deserializer::DeserializeObject(Isolate* isolate) { | 
| VisitRootPointer(Root::kPartialSnapshotCache, &root); | 
| DeserializeDeferredObjects(); | 
| FlushICacheForNewCodeObjectsAndRecordEmbeddedObjects(); | 
| + RecordWritesForLargeObjects(); | 
| 
Hannes Payer (out of office)
2017/05/09 21:19:51
Ideally, we would move this one into RegisterReser
 
Jakob Kummerow
2017/05/10 11:09:07
Done.
 | 
| result = Handle<HeapObject>(HeapObject::cast(root)); | 
| isolate->heap()->RegisterReservationsForBlackAllocation(reservations_); | 
| 
Hannes Payer (out of office)
2017/05/09 21:19:51
I guess that means we never have reservations for
 
Jakob Kummerow
2017/05/10 11:09:07
Correct; LO space doesn't use reservations (becaus
 | 
| } |