From: hpayer@chromium.org Date: Wed, 25 Jun 2014 10:53:00 +0000 (+0000) Subject: Wait for sweeper threads when expansion of old generation fails. X-Git-Tag: upstream/4.7.83~8545 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=51b189a27c15bdac9da3707a5a6a585e27deb2a3;p=platform%2Fupstream%2Fv8.git 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 --- diff --git a/src/spaces.cc b/src/spaces.cc index 22233d9..72a0222 100644 --- a/src/spaces.cc +++ b/src/spaces.cc @@ -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; }