X Tutup
The Wayback Machine - https://web.archive.org/web/20230222012222/https://github.com/nodejs/node/commit/290f2d8d3e
Skip to content
Permalink
Browse files
deps: V8: cherry-pick deb0813166f3
Original commit message:

    [heap] Add proper rebind support to StrongRootBlockAllocator

    MSVC's STL in debug mode rebinds the allocator passed to vectors to
    allocate helper structures, so we need StrongRootBlockAllocator to have
    proper rebind support rather than assuming it always rebinds to Address.

    Bug: v8:11241
    Change-Id: I15688e43fe2c71ec4ff0c287a03e36ca57427417
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2622915
    Auto-Submit: Leszek Swirski <leszeks@chromium.org>
    Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#72060}

Refs: v8/v8@deb0813

PR-URL: #36139
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
Reviewed-By: Shelley Vohr <codebytere@gmail.com>
  • Loading branch information
targos committed Feb 24, 2021
1 parent 63ed0b8 commit 290f2d8
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
@@ -36,7 +36,7 @@

# Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8.
'v8_embedder_string': '-node.10',
'v8_embedder_string': '-node.11',

##### V8 defaults for Node.js #####

@@ -2649,10 +2649,7 @@ class StrongRootBlockAllocator {
using size_type = size_t;
using difference_type = ptrdiff_t;
template <class U>
struct rebind {
STATIC_ASSERT((std::is_same<Address, U>::value));
using other = StrongRootBlockAllocator;
};
struct rebind;

explicit StrongRootBlockAllocator(Heap* heap) : heap_(heap) {}

@@ -2663,6 +2660,23 @@ class StrongRootBlockAllocator {
Heap* heap_;
};

// Rebinding to Address gives another StrongRootBlockAllocator.
template <>
struct StrongRootBlockAllocator::rebind<Address> {
using other = StrongRootBlockAllocator;
};

// Rebinding to something other than Address gives a std::allocator that
// is copy-constructable from StrongRootBlockAllocator.
template <class U>
struct StrongRootBlockAllocator::rebind {
class other : public std::allocator<U> {
public:
// NOLINTNEXTLINE
other(const StrongRootBlockAllocator&) {}
};
};

} // namespace internal
} // namespace v8

0 comments on commit 290f2d8

Please sign in to comment.
X Tutup