| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index b2bad48d4ab476ea8e1becf868b6ccab38a671ae..2bed396aa29eaa292ca60c3f8b33b5c67c61bc3b 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -1490,7 +1490,7 @@ MaybeObject* JSObject::AddFastPropertyUsingMap(Map* map) {
|
| bool JSObject::TryTransitionToField(Handle<JSObject> object,
|
| Handle<Name> key) {
|
| if (!object->map()->HasTransitionArray()) return false;
|
| - Handle<TransitionArray> transitions(object->map()->transitions());
|
| + TransitionArray* transitions = object->map()->transitions();
|
| int transition = transitions->Search(*key);
|
| if (transition == TransitionArray::kNotFound) return false;
|
| PropertyDetails target_details = transitions->GetTargetDetails(transition);
|
| @@ -4128,9 +4128,12 @@ TransitionArray* Map::transitions() {
|
|
|
| void Map::set_transitions(TransitionArray* transition_array,
|
| WriteBarrierMode mode) {
|
| - // In release mode, only run this code if verify_heap is on.
|
| - if (Heap::ShouldZapGarbage() && HasTransitionArray()) {
|
| - CHECK(transitions() != transition_array);
|
| + // Transition arrays are not shared. When one is replaced, it should not
|
| + // keep referenced objects alive, so we zap it.
|
| + // When there is another reference to the array somewhere (e.g. a handle),
|
| + // not zapping turns from a waste of memory into a source of crashes.
|
| + if (HasTransitionArray()) {
|
| + ASSERT(transitions() != transition_array);
|
| ZapTransitions();
|
| }
|
|
|
|
|