Revision: 10451
Author:   [email protected]
Date:     Thu Jan 19 10:50:01 2012
Log:      Fix missing write-barrier for prototype transitions.

[email protected]

Review URL: https://chromiumcodereview.appspot.com/9150041
http://code.google.com/p/v8/source/detail?r=10451

Modified:
 /branches/bleeding_edge/src/mark-compact.cc

=======================================
--- /branches/bleeding_edge/src/mark-compact.cc Thu Jan 19 05:38:37 2012
+++ /branches/bleeding_edge/src/mark-compact.cc Thu Jan 19 10:50:01 2012
@@ -2304,18 +2304,24 @@
Object* prototype = prototype_transitions->get(proto_offset + i * step); Object* cached_map = prototype_transitions->get(map_offset + i * step);
       if (IsMarked(prototype) && IsMarked(cached_map)) {
+        int proto_index = proto_offset + new_number_of_transitions * step;
+        int map_index = map_offset + new_number_of_transitions * step;
         if (new_number_of_transitions != i) {
           prototype_transitions->set_unchecked(
               heap_,
-              proto_offset + new_number_of_transitions * step,
+              proto_index,
               prototype,
               UPDATE_WRITE_BARRIER);
           prototype_transitions->set_unchecked(
               heap_,
-              map_offset + new_number_of_transitions * step,
+              map_index,
               cached_map,
               SKIP_WRITE_BARRIER);
         }
+        Object** slot =
+            HeapObject::RawField(prototype_transitions,
+ FixedArray::OffsetOfElementAt(proto_index));
+        RecordSlot(slot, slot, prototype);
         new_number_of_transitions++;
       }
     }

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to