Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (124140 => 124141)
--- trunk/Source/_javascript_Core/ChangeLog 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/ChangeLog 2012-07-31 01:48:18 UTC (rev 124141)
@@ -1,3 +1,36 @@
+2012-07-30 Sheriff Bot <[email protected]>
+
+ Unreviewed, rolling out r124123.
+ http://trac.webkit.org/changeset/124123
+ https://bugs.webkit.org/show_bug.cgi?id=92700
+
+ ASSERT crashes terminate webkit Layout tests (Requested by
+ msaboff on #webkit).
+
+ * heap/Heap.cpp:
+ * heap/Heap.h:
+ (Heap):
+ * heap/IncrementalSweeper.cpp:
+ (JSC::IncrementalSweeper::doSweep):
+ (JSC::IncrementalSweeper::startSweeping):
+ (JSC::IncrementalSweeper::IncrementalSweeper):
+ (JSC):
+ * heap/IncrementalSweeper.h:
+ (IncrementalSweeper):
+ * heap/MarkedAllocator.cpp:
+ (JSC::MarkedAllocator::tryAllocateHelper):
+ (JSC::MarkedAllocator::addBlock):
+ * heap/MarkedAllocator.h:
+ (JSC::MarkedAllocator::zapFreeList):
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::sweepHelper):
+ * heap/MarkedSpace.cpp:
+ * heap/MarkedSpace.h:
+ (JSC::MarkedSpace::sweep):
+ (JSC):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::~JSGlobalData):
+
2012-07-30 Mark Hahnenberg <[email protected]>
Structures should be swept after all other objects
Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/Heap.cpp 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp 2012-07-31 01:48:18 UTC (rev 124141)
@@ -830,18 +830,4 @@
m_compiledCode.append(executable);
}
-bool Heap::isSafeToSweepStructures()
-{
- return !m_sweeper || m_sweeper->structuresCanBeSwept();
-}
-
-void Heap::didStartVMShutdown()
-{
- m_activityCallback->didStartVMShutdown();
- m_activityCallback = 0;
- m_sweeper->didStartVMShutdown();
- m_sweeper = 0;
- lastChanceToFinalize();
-}
-
} // namespace JSC
Modified: trunk/Source/_javascript_Core/heap/Heap.h (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/Heap.h 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/Heap.h 2012-07-31 01:48:18 UTC (rev 124141)
@@ -168,8 +168,6 @@
void didAbandon(size_t);
bool isPagedOut(double deadline);
- bool isSafeToSweepStructures();
- void didStartVMShutdown();
private:
friend class CodeBlock;
Modified: trunk/Source/_javascript_Core/heap/IncrementalSweeper.cpp (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/IncrementalSweeper.cpp 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/IncrementalSweeper.cpp 2012-07-31 01:48:18 UTC (rev 124141)
@@ -69,23 +69,10 @@
CFRunLoopTimerSetNextFireDate(m_timer.get(), CFAbsoluteTimeGetCurrent() + s_decade);
}
-bool IncrementalSweeper::structuresCanBeSwept()
-{
- ASSERT(m_currentBlockToSweepIndex <= m_blocksToSweep.size());
- return !m_blocksToSweep.size() || m_currentBlockToSweepIndex >= m_blocksToSweep.size();
-}
-
void IncrementalSweeper::doSweep(double sweepBeginTime)
{
while (m_currentBlockToSweepIndex < m_blocksToSweep.size()) {
- MarkedBlock* block = m_blocksToSweep[m_currentBlockToSweepIndex];
- if (block->onlyContainsStructures()) {
- m_currentBlockToSweepIndex++;
- continue;
- }
-
- m_blocksToSweep[m_currentBlockToSweepIndex++] = 0;
-
+ MarkedBlock* block = m_blocksToSweep[m_currentBlockToSweepIndex++];
if (!block->needsSweeping())
continue;
@@ -100,29 +87,6 @@
return;
}
- while (m_currentStructureBlockToSweepIndex < m_blocksToSweep.size()) {
- MarkedBlock* block = m_blocksToSweep[m_currentStructureBlockToSweepIndex];
- if (!block) {
- m_currentStructureBlockToSweepIndex++;
- continue;
- }
-
- m_blocksToSweep[m_currentStructureBlockToSweepIndex++] = 0;
-
- if (!block->needsSweeping())
- continue;
-
- block->sweep();
- m_globalData->heap.objectSpace().freeOrShrinkBlock(block);
-
- CFTimeInterval elapsedTime = WTF::monotonicallyIncreasingTime() - sweepBeginTime;
- if (elapsedTime < sweepTimeSlice)
- continue;
-
- scheduleTimer();
- return;
- }
-
m_blocksToSweep.clear();
cancelTimer();
}
@@ -131,23 +95,13 @@
{
WTF::copyToVector(blockSnapshot, m_blocksToSweep);
m_currentBlockToSweepIndex = 0;
- m_currentStructureBlockToSweepIndex = 0;
scheduleTimer();
}
-void IncrementalSweeper::willFinishSweeping()
-{
- m_currentBlockToSweepIndex = m_currentStructureBlockToSweepIndex = 0;
- m_blocksToSweep.clear();
- if (m_globalData)
- cancelTimer();
-}
-
#else
IncrementalSweeper::IncrementalSweeper(JSGlobalData* globalData)
: HeapTimer(globalData)
- , m_structuresCanBeSwept(false)
{
}
@@ -160,21 +114,10 @@
return new IncrementalSweeper(heap->globalData());
}
-bool IncrementalSweeper::structuresCanBeSwept()
-{
- return m_structuresCanBeSwept;
-}
-
void IncrementalSweeper::startSweeping(const HashSet<MarkedBlock*>&)
{
- m_structuresCanBeSwept = false;
}
-
-void IncrementalSweeper::willFinishSweeping()
-{
- m_structuresCanBeSwept = true;
-}
-
+
#endif
} // namespace JSC
Modified: trunk/Source/_javascript_Core/heap/IncrementalSweeper.h (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/IncrementalSweeper.h 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/IncrementalSweeper.h 2012-07-31 01:48:18 UTC (rev 124141)
@@ -42,11 +42,8 @@
static IncrementalSweeper* create(Heap*);
void startSweeping(const HashSet<MarkedBlock*>& blockSnapshot);
virtual void doWork();
- bool structuresCanBeSwept();
- void willFinishSweeping();
private:
-
#if USE(CF)
IncrementalSweeper(Heap*, CFRunLoopRef);
@@ -55,14 +52,11 @@
void cancelTimer();
unsigned m_currentBlockToSweepIndex;
- unsigned m_currentStructureBlockToSweepIndex;
Vector<MarkedBlock*> m_blocksToSweep;
#else
IncrementalSweeper(JSGlobalData*);
-
- bool m_structuresCanBeSwept;
-
+
#endif
};
Modified: trunk/Source/_javascript_Core/heap/MarkedAllocator.cpp (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/MarkedAllocator.cpp 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/MarkedAllocator.cpp 2012-07-31 01:48:18 UTC (rev 124141)
@@ -3,7 +3,6 @@
#include "GCActivityCallback.h"
#include "Heap.h"
-#include "IncrementalSweeper.h"
#include "JSGlobalData.h"
#include <wtf/CurrentTime.h>
@@ -30,14 +29,6 @@
inline void* MarkedAllocator::tryAllocateHelper()
{
if (!m_freeList.head) {
- if (m_onlyContainsStructures && !m_heap->isSafeToSweepStructures()) {
- if (m_currentBlock) {
- m_currentBlock->didConsumeFreeList();
- m_currentBlock = 0;
- }
- return 0;
- }
-
for (MarkedBlock*& block = m_blocksToSweep; block; block = static_cast<MarkedBlock*>(block->next())) {
m_freeList = block->sweep(MarkedBlock::SweepToFreeList);
if (m_freeList.head) {
@@ -113,6 +104,7 @@
void MarkedAllocator::addBlock(MarkedBlock* block)
{
ASSERT(!m_currentBlock);
+ ASSERT(!m_blocksToSweep);
ASSERT(!m_freeList.head);
m_blockList.append(block);
Modified: trunk/Source/_javascript_Core/heap/MarkedAllocator.h (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/MarkedAllocator.h 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/MarkedAllocator.h 2012-07-31 01:48:18 UTC (rev 124141)
@@ -101,7 +101,6 @@
}
m_currentBlock->zapFreeList(m_freeList);
- m_currentBlock = 0;
m_freeList = MarkedBlock::FreeList();
}
Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.cpp (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/MarkedBlock.cpp 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.cpp 2012-07-31 01:48:18 UTC (rev 124141)
@@ -26,7 +26,6 @@
#include "config.h"
#include "MarkedBlock.h"
-#include "IncrementalSweeper.h"
#include "JSCell.h"
#include "JSObject.h"
#include "ScopeChain.h"
@@ -141,12 +140,10 @@
ASSERT_NOT_REACHED();
return FreeList();
case Marked:
- ASSERT(!m_onlyContainsStructures || heap()->isSafeToSweepStructures());
return sweepMode == SweepToFreeList
? specializedSweep<Marked, SweepToFreeList, destructorCallNeeded>()
: specializedSweep<Marked, SweepOnly, destructorCallNeeded>();
case Zapped:
- ASSERT(!m_onlyContainsStructures || heap()->isSafeToSweepStructures());
return sweepMode == SweepToFreeList
? specializedSweep<Zapped, SweepToFreeList, destructorCallNeeded>()
: specializedSweep<Zapped, SweepOnly, destructorCallNeeded>();
Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.cpp (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/MarkedSpace.cpp 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.cpp 2012-07-31 01:48:18 UTC (rev 124141)
@@ -21,7 +21,6 @@
#include "config.h"
#include "MarkedSpace.h"
-#include "IncrementalSweeper.h"
#include "JSGlobalObject.h"
#include "JSLock.h"
#include "JSObject.h"
@@ -109,12 +108,6 @@
forEachBlock<LastChanceToFinalize>();
}
-void MarkedSpace::sweep()
-{
- m_heap->sweeper()->willFinishSweeping();
- forEachBlock<Sweep>();
-}
-
void MarkedSpace::resetAllocators()
{
for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) {
Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.h (124140 => 124141)
--- trunk/Source/_javascript_Core/heap/MarkedSpace.h 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.h 2012-07-31 01:48:18 UTC (rev 124141)
@@ -235,6 +235,11 @@
forEachBlock<ClearMarks>();
}
+inline void MarkedSpace::sweep()
+{
+ forEachBlock<Sweep>();
+}
+
inline size_t MarkedSpace::objectCount()
{
return forEachBlock<MarkCount>();
Modified: trunk/Source/_javascript_Core/runtime/JSGlobalData.cpp (124140 => 124141)
--- trunk/Source/_javascript_Core/runtime/JSGlobalData.cpp 2012-07-31 01:45:44 UTC (rev 124140)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalData.cpp 2012-07-31 01:48:18 UTC (rev 124141)
@@ -223,7 +223,9 @@
JSGlobalData::~JSGlobalData()
{
ASSERT(!m_apiLock.currentThreadIsHoldingLock());
- heap.didStartVMShutdown();
+ heap.activityCallback()->didStartVMShutdown();
+ heap.sweeper()->didStartVMShutdown();
+ heap.lastChanceToFinalize();
delete interpreter;
#ifndef NDEBUG