Title: [118646] trunk/Source/_javascript_Core
Revision
118646
Author
[email protected]
Date
2012-05-27 21:56:01 -0700 (Sun, 27 May 2012)

Log Message

Weak pointer finalization should be lazy
https://bugs.webkit.org/show_bug.cgi?id=87599

Reviewed by Darin Adler.

* heap/Heap.cpp:
(JSC::Heap::collect): Don't force immediate finalization -- it will
happen lazily.

* heap/MarkedBlock.cpp:
(JSC::MarkedBlock::sweep): Sweep a block's weak set when sweeping the
block. The weak set may not have been swept yet, and this is our last
chance to run weak finalizers before we recycle the memory they reference.

* heap/MarkedBlock.h:
* heap/MarkedSpace.cpp:
(JSC::MarkedBlock::sweepWeakSets):
* heap/MarkedSpace.h:
(JSC::MarkedSpace::sweepWeakSets): Nixed sweepWeakSets because it's unused
now.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (118645 => 118646)


--- trunk/Source/_javascript_Core/ChangeLog	2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-05-28 04:56:01 UTC (rev 118646)
@@ -1,3 +1,26 @@
+2012-05-27  Geoffrey Garen  <[email protected]>
+
+        Weak pointer finalization should be lazy
+        https://bugs.webkit.org/show_bug.cgi?id=87599
+
+        Reviewed by Darin Adler.
+
+        * heap/Heap.cpp:
+        (JSC::Heap::collect): Don't force immediate finalization -- it will
+        happen lazily.
+
+        * heap/MarkedBlock.cpp:
+        (JSC::MarkedBlock::sweep): Sweep a block's weak set when sweeping the
+        block. The weak set may not have been swept yet, and this is our last
+        chance to run weak finalizers before we recycle the memory they reference.
+
+        * heap/MarkedBlock.h:
+        * heap/MarkedSpace.cpp:
+        (JSC::MarkedBlock::sweepWeakSets):
+        * heap/MarkedSpace.h:
+        (JSC::MarkedSpace::sweepWeakSets): Nixed sweepWeakSets because it's unused
+        now.
+
 2012-05-26  Geoffrey Garen  <[email protected]>
 
         WebKit should be lazy-finalization-safe (esp. the DOM) v2

Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (118645 => 118646)


--- trunk/Source/_javascript_Core/heap/Heap.cpp	2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp	2012-05-28 04:56:01 UTC (rev 118646)
@@ -687,7 +687,6 @@
 
     {
         GCPHASE(FinalizeWeakHandles);
-        m_objectSpace.sweepWeakSets();
         m_globalData->smallStrings.finalizeSmallStrings();
     }
     

Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.cpp (118645 => 118646)


--- trunk/Source/_javascript_Core/heap/MarkedBlock.cpp	2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.cpp	2012-05-28 04:56:01 UTC (rev 118646)
@@ -114,6 +114,8 @@
 {
     HEAP_LOG_BLOCK_STATE_TRANSITION(this);
 
+    m_weakSet.sweep();
+
     if (sweepMode == SweepOnly && !m_cellsNeedDestruction)
         return FreeList();
 

Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.h (118645 => 118646)


--- trunk/Source/_javascript_Core/heap/MarkedBlock.h	2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.h	2012-05-28 04:56:01 UTC (rev 118646)
@@ -133,7 +133,6 @@
 
         void visitWeakSet(HeapRootVisitor&);
         void reapWeakSet();
-        void sweepWeakSet();
 
         // While allocating from a free list, MarkedBlock temporarily has bogus
         // cell liveness data. To restore accurate cell liveness data, call one
@@ -287,11 +286,6 @@
         m_weakSet.reap();
     }
 
-    inline void MarkedBlock::sweepWeakSet()
-    {
-        m_weakSet.sweep();
-    }
-
     inline void MarkedBlock::didConsumeFreeList()
     {
         HEAP_LOG_BLOCK_STATE_TRANSITION(this);

Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.cpp (118645 => 118646)


--- trunk/Source/_javascript_Core/heap/MarkedSpace.cpp	2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.cpp	2012-05-28 04:56:01 UTC (rev 118646)
@@ -77,10 +77,6 @@
     void operator()(MarkedBlock* block) { block->reapWeakSet(); }
 };
 
-struct SweepWeakSet : MarkedBlock::VoidFunctor {
-    void operator()(MarkedBlock* block) { block->sweepWeakSet(); }
-};
-
 MarkedSpace::MarkedSpace(Heap* heap)
     : m_heap(heap)
 {
@@ -142,11 +138,6 @@
     forEachBlock<ReapWeakSet>();
 }
 
-void MarkedSpace::sweepWeakSets()
-{
-    forEachBlock<SweepWeakSet>();
-}
-
 void MarkedSpace::canonicalizeCellLivenessData()
 {
     for (size_t cellSize = preciseStep; cellSize <= preciseCutoff; cellSize += preciseStep) {

Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.h (118645 => 118646)


--- trunk/Source/_javascript_Core/heap/MarkedSpace.h	2012-05-28 04:39:30 UTC (rev 118645)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.h	2012-05-28 04:56:01 UTC (rev 118646)
@@ -85,7 +85,6 @@
 
     void visitWeakSets(HeapRootVisitor&);
     void reapWeakSets();
-    void sweepWeakSets();
 
     MarkedBlockSet& blocks() { return m_blocks; }
     
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to