Index: src/heap.cc |
diff --git a/src/heap.cc b/src/heap.cc |
index 765081a9ca874d035478c80a7ee85dadf3d6eea4..5f6ec663e247a39278f254ff0b4494520aa809fe 100644 |
--- a/src/heap.cc |
+++ b/src/heap.cc |
@@ -155,7 +155,8 @@ Heap::Heap() |
scavenges_since_last_idle_round_(kIdleScavengeThreshold), |
promotion_queue_(this), |
configured_(false), |
- chunks_queued_for_free_(NULL) { |
+ chunks_queued_for_free_(NULL), |
+ relocation_mutex_(NULL) { |
// Allow build-time customization of the max semispace size. Building |
// V8 with snapshots and a non-default max semispace size is much |
// easier if you can define it as part of the build environment. |
@@ -1199,6 +1200,7 @@ class ScavengeWeakObjectRetainer : public WeakObjectRetainer { |
void Heap::Scavenge() { |
+ RelocationLock relocation_lock(this); |
#ifdef DEBUG |
if (FLAG_verify_heap) VerifyNonPointerSpacePointers(); |
#endif |
@@ -6156,6 +6158,8 @@ bool Heap::SetUp(bool create_heap_objects) { |
store_buffer()->SetUp(); |
+ if (FLAG_parallel_recompilation) relocation_mutex_ = OS::CreateMutex(); |
+ |
return true; |
} |
@@ -6241,6 +6245,8 @@ void Heap::TearDown() { |
isolate_->memory_allocator()->TearDown(); |
+ delete relocation_mutex_; |
+ |
#ifdef DEBUG |
delete debug_utils_; |
debug_utils_ = NULL; |