| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index 15e61e7ac95b95b3fada3295ccdbcf84c70ed8d2..9c2f5a111b93ca832b96ca557dafd22781d3abfe 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -1356,8 +1356,7 @@ bool Heap::PerformGarbageCollection(
|
| break;
|
| case SCAVENGER:
|
| if ((fast_promotion_mode_ &&
|
| - CanExpandOldGeneration(new_space()->Size())) ||
|
| - concurrent_marking_->IsTaskPending()) {
|
| + CanExpandOldGeneration(new_space()->Size()))) {
|
| tracer()->NotifyYoungGenerationHandling(
|
| YoungGenerationHandling::kFastPromotionDuringScavenge);
|
| EvacuateYoungGeneration();
|
| @@ -1633,6 +1632,7 @@ class ScavengeWeakObjectRetainer : public WeakObjectRetainer {
|
|
|
| void Heap::EvacuateYoungGeneration() {
|
| TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_EVACUATE);
|
| + base::LockGuard<base::Mutex> guard(relocation_mutex());
|
| if (!FLAG_concurrent_marking) {
|
| DCHECK(fast_promotion_mode_);
|
| DCHECK(CanExpandOldGeneration(new_space()->Size()));
|
| @@ -1674,7 +1674,7 @@ void Heap::EvacuateYoungGeneration() {
|
|
|
| void Heap::Scavenge() {
|
| TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_SCAVENGE);
|
| - RelocationLock relocation_lock(this);
|
| + base::LockGuard<base::Mutex> guard(relocation_mutex());
|
| // There are soft limits in the allocation code, designed to trigger a mark
|
| // sweep collection by failing allocations. There is no sense in trying to
|
| // trigger one during scavenge: scavenges allocation should always succeed.
|
|
|