Wait for sweeper threads when expansion of old generation fails.
BUG= R=ulan@chromium.org Review URL: https://codereview.chromium.org/351013002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22007 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
70ef1c240f
commit
51b189a27c
@ -2595,6 +2595,16 @@ HeapObject* PagedSpace::SlowAllocateRaw(int size_in_bytes) {
|
||||
// collection.
|
||||
if (!heap()->always_allocate() &&
|
||||
heap()->OldGenerationAllocationLimitReached()) {
|
||||
// If sweeper threads are active, wait for them at that point.
|
||||
if (collector->IsConcurrentSweepingInProgress()) {
|
||||
collector->WaitUntilSweepingCompleted();
|
||||
|
||||
// After waiting for the sweeper threads, there may be new free-list
|
||||
// entries.
|
||||
HeapObject* object = free_list_.Allocate(size_in_bytes);
|
||||
if (object != NULL) return object;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2604,16 +2614,6 @@ HeapObject* PagedSpace::SlowAllocateRaw(int size_in_bytes) {
|
||||
return free_list_.Allocate(size_in_bytes);
|
||||
}
|
||||
|
||||
// If sweeper threads are active, wait for them at that point.
|
||||
if (collector->IsConcurrentSweepingInProgress()) {
|
||||
collector->WaitUntilSweepingCompleted();
|
||||
|
||||
// After waiting for the sweeper threads, there may be new free-list
|
||||
// entries.
|
||||
HeapObject* object = free_list_.Allocate(size_in_bytes);
|
||||
if (object != NULL) return object;
|
||||
}
|
||||
|
||||
// Finally, fail.
|
||||
return NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user