From 0fcf249078fe58310e35b814f34872a47affe6ab Mon Sep 17 00:00:00 2001 From: Matt Loring Date: Wed, 19 Oct 2016 13:42:26 -0700 Subject: [PATCH] deps: cherry-pick bb4974d from v8 upstream Original commit message: [heap] Properly propagate allocated space during new space evacuaton in MC New space evaucation in MC supports, similar to scavenges, fall back allocation in old space. For new space evacuation we support sticky and non-sticky modes for fallback. The sticky mode essentially removes the capability to allocate in new space while the non-sticky mode only falls back for a single allocation. We use the non-sticky mode for allocations that are too large for a LAB but should still go in new space. When such an allocation fails in new space, we allocate in old space in non-sticky mode as we would still like to reuse the remainder memory in new space. However, in such a case we fail to properly report the space allocated in resulting in a missed recorded slot. BUG=chromium:641270 R=ulan@chromium.org Review-Url: https://codereview.chromium.org/2280943002 Cr-Commit-Position: refs/heads/master@{#38940} PR-URL: https://github.com/nodejs/node/pull/9192 Reviewed-By: Ben Noordhuis Reviewed-By: James M Snell --- deps/v8/include/v8-version.h | 2 +- deps/v8/src/heap/mark-compact.cc | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 6540e787d28346..353e3392ad7373 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 1 #define V8_BUILD_NUMBER 281 -#define V8_PATCH_LEVEL 84 +#define V8_PATCH_LEVEL 85 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/src/heap/mark-compact.cc b/deps/v8/src/heap/mark-compact.cc index 78ee33f530d9ff..9abcd1a4b334a6 100644 --- a/deps/v8/src/heap/mark-compact.cc +++ b/deps/v8/src/heap/mark-compact.cc @@ -1674,6 +1674,7 @@ class MarkCompactCollector::EvacuateNewSpaceVisitor final const int size = old_object->Size(); AllocationAlignment alignment = old_object->RequiredAlignment(); AllocationResult allocation; + AllocationSpace space_allocated_in = space_to_allocate_; if (space_to_allocate_ == NEW_SPACE) { if (size > kMaxLabObjectSize) { allocation = @@ -1684,11 +1685,12 @@ class MarkCompactCollector::EvacuateNewSpaceVisitor final } if (allocation.IsRetry() || (space_to_allocate_ == OLD_SPACE)) { allocation = AllocateInOldSpace(size, alignment); + space_allocated_in = OLD_SPACE; } bool ok = allocation.To(target_object); DCHECK(ok); USE(ok); - return space_to_allocate_; + return space_allocated_in; } inline bool NewLocalAllocationBuffer() {