summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/heap/ConservativeRoots.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/heap/ConservativeRoots.cpp')
-rw-r--r--Source/JavaScriptCore/heap/ConservativeRoots.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/Source/JavaScriptCore/heap/ConservativeRoots.cpp b/Source/JavaScriptCore/heap/ConservativeRoots.cpp
index 05c668c35..a509f06e1 100644
--- a/Source/JavaScriptCore/heap/ConservativeRoots.cpp
+++ b/Source/JavaScriptCore/heap/ConservativeRoots.cpp
@@ -26,6 +26,8 @@
#include "config.h"
#include "ConservativeRoots.h"
+#include "BumpSpace.h"
+#include "BumpSpaceInlineMethods.h"
#include "CodeBlock.h"
#include "DFGCodeBlocks.h"
#include "JSCell.h"
@@ -34,16 +36,12 @@
namespace JSC {
-inline bool isPointerAligned(void* p)
-{
- return !((intptr_t)(p) & (sizeof(char*) - 1));
-}
-
-ConservativeRoots::ConservativeRoots(const MarkedBlockSet* blocks)
+ConservativeRoots::ConservativeRoots(const MarkedBlockSet* blocks, BumpSpace* bumpSpace)
: m_roots(m_inlineRoots)
, m_size(0)
, m_capacity(inlineCapacity)
, m_blocks(blocks)
+ , m_bumpSpace(bumpSpace)
{
}
@@ -74,6 +72,10 @@ inline void ConservativeRoots::genericAddPointer(void* p, TinyBloomFilter filter
{
markHook.mark(p);
+ BumpBlock* block;
+ if (m_bumpSpace->contains(p, block))
+ m_bumpSpace->pin(block);
+
MarkedBlock* candidate = MarkedBlock::blockFor(p);
if (filter.ruleOut(reinterpret_cast<Bits>(candidate))) {
ASSERT(!candidate || !m_blocks->set().contains(candidate));
@@ -110,8 +112,8 @@ void ConservativeRoots::genericAddSpan(void* begin, void* end, MarkHook& markHoo
void ConservativeRoots::add(void* begin, void* end)
{
- DummyMarkHook dummyMarkHook;
- genericAddSpan(begin, end, dummyMarkHook);
+ DummyMarkHook hook;
+ genericAddSpan(begin, end, hook);
}
void ConservativeRoots::add(void* begin, void* end, DFGCodeBlocks& dfgCodeBlocks)