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

Reply via email to