Title: [167948] trunk/Source/_javascript_Core
- Revision
- 167948
- Author
- mark....@apple.com
- Date
- 2014-04-29 11:20:05 -0700 (Tue, 29 Apr 2014)
Log Message
Zombifying sweep should ignore retired blocks.
<https://webkit.org/b/132344>
Reviewed by Mark Hahnenberg.
By definition, retired blocks do not have "dead" objects, or at least
none that we know of yet until the next marking phase has been run
over it. So, we should not be sweeping them (even for zombie mode).
* heap/Heap.cpp:
(JSC::Heap::zombifyDeadObjects):
* heap/MarkedSpace.cpp:
(JSC::MarkedSpace::zombifySweep):
* heap/MarkedSpace.h:
(JSC::ZombifySweep::operator()):
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (167947 => 167948)
--- trunk/Source/_javascript_Core/ChangeLog 2014-04-29 18:09:09 UTC (rev 167947)
+++ trunk/Source/_javascript_Core/ChangeLog 2014-04-29 18:20:05 UTC (rev 167948)
@@ -1,5 +1,23 @@
2014-04-29 Mark Lam <mark....@apple.com>
+ Zombifying sweep should ignore retired blocks.
+ <https://webkit.org/b/132344>
+
+ Reviewed by Mark Hahnenberg.
+
+ By definition, retired blocks do not have "dead" objects, or at least
+ none that we know of yet until the next marking phase has been run
+ over it. So, we should not be sweeping them (even for zombie mode).
+
+ * heap/Heap.cpp:
+ (JSC::Heap::zombifyDeadObjects):
+ * heap/MarkedSpace.cpp:
+ (JSC::MarkedSpace::zombifySweep):
+ * heap/MarkedSpace.h:
+ (JSC::ZombifySweep::operator()):
+
+2014-04-29 Mark Lam <mark....@apple.com>
+
Fix bit rot in zombie mode heap code.
<https://webkit.org/b/132342>
Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (167947 => 167948)
--- trunk/Source/_javascript_Core/heap/Heap.cpp 2014-04-29 18:09:09 UTC (rev 167947)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp 2014-04-29 18:20:05 UTC (rev 167948)
@@ -1343,7 +1343,7 @@
{
SamplingRegion samplingRegion("Garbage Collection: Sweeping");
DelayedReleaseScope delayedReleaseScope(m_objectSpace);
- m_objectSpace.sweep();
+ m_objectSpace.zombifySweep();
}
HeapIterationScope iterationScope(*this);
m_objectSpace.forEachDeadCell<Zombify>(iterationScope);
Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.cpp (167947 => 167948)
--- trunk/Source/_javascript_Core/heap/MarkedSpace.cpp 2014-04-29 18:09:09 UTC (rev 167947)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.cpp 2014-04-29 18:20:05 UTC (rev 167948)
@@ -127,6 +127,14 @@
forEachBlock<Sweep>();
}
+void MarkedSpace::zombifySweep()
+{
+ if (Options::logGC())
+ dataLog("Zombifying sweep...");
+ m_heap->sweeper()->willFinishSweeping();
+ forEachBlock<ZombifySweep>();
+}
+
void MarkedSpace::resetAllocators()
{
for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) {
Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.h (167947 => 167948)
--- trunk/Source/_javascript_Core/heap/MarkedSpace.h 2014-04-29 18:09:09 UTC (rev 167947)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.h 2014-04-29 18:20:05 UTC (rev 167948)
@@ -63,6 +63,14 @@
void operator()(MarkedBlock* block) { block->sweep(); }
};
+struct ZombifySweep : MarkedBlock::VoidFunctor {
+ void operator()(MarkedBlock* block)
+ {
+ if (block->needsSweeping())
+ block->sweep();
+ }
+};
+
struct MarkCount : MarkedBlock::CountFunctor {
void operator()(MarkedBlock* block) { count(block->markCount()); }
};
@@ -121,6 +129,7 @@
void clearRememberedSet();
void clearNewlyAllocated();
void sweep();
+ void zombifySweep();
size_t objectCount();
size_t size();
size_t capacity();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes