aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2014-12-11 12:10:14 +0000
committerBen Murdoch <benm@google.com>2014-12-11 12:10:14 +0000
commitb07490fed7e3a1f0444b29e77eea1fe5d1c35b95 (patch)
tree8757922247e3d89ea26e05233727dd490c49bf31
parent4293d2efc00f4b6a4163965a6f466170268f6411 (diff)
parent887005895a11123fdc0d4c3b2e8e53cc8dd7c27a (diff)
downloadv8-b07490fed7e3a1f0444b29e77eea1fe5d1c35b95.tar.gz
Merge v8 from https://chromium.googlesource.com/v8/v8.git at 887005895a11123fdc0d4c3b2e8e53cc8dd7c27a
This commit was generated by merge_from_chromium.py. Change-Id: I926f7306905f4f6751fd9d9493e3baaea8f55789
-rw-r--r--src/heap/heap.cc12
-rw-r--r--src/version.cc2
2 files changed, 12 insertions, 2 deletions
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index 5c8cd4528..c4eed9ce2 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -2038,7 +2038,17 @@ class ScavengingVisitor : public StaticVisitorBase {
// Order is important: slot might be inside of the target if target
// was allocated over a dead object and slot comes from the store
// buffer.
- *slot = target;
+
+ // Unfortunately, the allocation can also write over the slot if the slot
+ // was in free space and the allocation wrote free list data (such as the
+ // free list map or entry size) over the slot. We guard against this by
+ // checking that the slot still points to the object being moved. This
+ // should be sufficient because neither the free list map nor the free
+ // list entry size should look like a new space pointer (the former is an
+ // old space pointer, the latter is word-aligned).
+ if (*slot == object) {
+ *slot = target;
+ }
MigrateObject(heap, object, target, object_size);
if (object_contents == POINTER_OBJECT) {
diff --git a/src/version.cc b/src/version.cc
index 258d7593c..0e3a188f5 100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -35,7 +35,7 @@
#define MAJOR_VERSION 3
#define MINOR_VERSION 30
#define BUILD_NUMBER 33
-#define PATCH_LEVEL 7
+#define PATCH_LEVEL 8
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
#define IS_CANDIDATE_VERSION 0