summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/heap/MarkStack.cpp
diff options
context:
space:
mode:
authorBalazs Kilvady <kilvadyb@homejinni.com>2013-04-04 13:51:09 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-04-04 14:56:09 +0200
commit6ab46a19bac261f42b664c62f8c2477b294b86ea (patch)
treeae60fd2f0b00c1d4a2f3b54e489474280c9a9d7f /Source/JavaScriptCore/heap/MarkStack.cpp
parentb5924dc9e872e73489c30efec775bcfe78a345e5 (diff)
downloadqtwebkit-6ab46a19bac261f42b664c62f8c2477b294b86ea.tar.gz
r134080 causes heap problem on linux systems where PAGESIZE != 4096
https://bugs.webkit.org/show_bug.cgi?id=102828 Patch by Balazs Kilvady <kilvadyb@homejinni.com> on 2013-01-18 Reviewed by Mark Hahnenberg. Make MarkStackSegment::blockSize as the capacity of segments of a MarkStackArray. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def: * heap/MarkStack.cpp: (JSC): (JSC::MarkStackArray::MarkStackArray): (JSC::MarkStackArray::expand): (JSC::MarkStackArray::donateSomeCellsTo): (JSC::MarkStackArray::stealSomeCellsFrom): * heap/MarkStack.h: (JSC::MarkStackSegment::data): (CapacityFromSize): (MarkStackArray): * heap/MarkStackInlines.h: (JSC::MarkStackArray::setTopForFullSegment): (JSC::MarkStackArray::append): (JSC::MarkStackArray::isEmpty): (JSC::MarkStackArray::size): * runtime/Options.h: (JSC): Change-Id: I4663100b6b8b054bed03c0c6eb01bb9274a1b264 git-svn-id: http://svn.webkit.org/repository/webkit/trunk@140195 268f45cc-cd09-0410-ab3c-d52691b4dbfc Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'Source/JavaScriptCore/heap/MarkStack.cpp')
-rw-r--r--Source/JavaScriptCore/heap/MarkStack.cpp12
1 files changed, 4 insertions, 8 deletions
diff --git a/Source/JavaScriptCore/heap/MarkStack.cpp b/Source/JavaScriptCore/heap/MarkStack.cpp
index 755a0ad50..39907c715 100644
--- a/Source/JavaScriptCore/heap/MarkStack.cpp
+++ b/Source/JavaScriptCore/heap/MarkStack.cpp
@@ -31,7 +31,6 @@
#include "CopiedSpace.h"
#include "CopiedSpaceInlines.h"
#include "Heap.h"
-#include "Options.h"
#include "JSArray.h"
#include "JSCell.h"
#include "JSObject.h"
@@ -45,13 +44,13 @@
namespace JSC {
+COMPILE_ASSERT(MarkStackSegment::blockSize == WeakBlock::blockSize, blockSizeMatch);
+
MarkStackArray::MarkStackArray(BlockAllocator& blockAllocator)
: m_blockAllocator(blockAllocator)
- , m_segmentCapacity(MarkStackSegment::capacityFromSize(Options::gcMarkStackSegmentSize()))
, m_top(0)
, m_numberOfSegments(0)
{
- ASSERT(MarkStackSegment::blockSize == WeakBlock::blockSize);
m_segments.push(MarkStackSegment::create(m_blockAllocator.allocate<MarkStackSegment>()));
m_numberOfSegments++;
}
@@ -64,7 +63,7 @@ MarkStackArray::~MarkStackArray()
void MarkStackArray::expand()
{
- ASSERT(m_segments.head()->m_top == m_segmentCapacity);
+ ASSERT(m_segments.head()->m_top == s_segmentCapacity);
MarkStackSegment* nextSegment = MarkStackSegment::create(m_blockAllocator.allocate<MarkStackSegment>());
m_numberOfSegments++;
@@ -97,8 +96,6 @@ void MarkStackArray::donateSomeCellsTo(MarkStackArray& other)
// we prefer donating whole segments over donating individual cells,
// even if this skews away from our 1 / 2 target.
- ASSERT(m_segmentCapacity == other.m_segmentCapacity);
-
size_t segmentsToDonate = m_numberOfSegments / 2; // If we only have one segment (our head) we don't donate any segments.
if (!segmentsToDonate) {
@@ -141,7 +138,6 @@ void MarkStackArray::stealSomeCellsFrom(MarkStackArray& other, size_t idleThread
// To reduce copying costs, we prefer stealing a whole segment over stealing
// individual cells, even if this skews away from our 1 / N target.
- ASSERT(m_segmentCapacity == other.m_segmentCapacity);
validatePrevious();
other.validatePrevious();
@@ -151,7 +147,7 @@ void MarkStackArray::stealSomeCellsFrom(MarkStackArray& other, size_t idleThread
MarkStackSegment* otherHead = other.m_segments.removeHead();
MarkStackSegment* myHead = m_segments.removeHead();
- ASSERT(other.m_segments.head()->m_top == m_segmentCapacity);
+ ASSERT(other.m_segments.head()->m_top == s_segmentCapacity);
m_segments.push(other.m_segments.removeHead());