Title: [95308] trunk/Source/_javascript_Core
Revision
95308
Author
fpi...@apple.com
Date
2011-09-16 11:43:25 -0700 (Fri, 16 Sep 2011)

Log Message

REGRESSION: Reproducible crash below SlotVisitor::harvestWeakReferences
using Domino's online ordering
https://bugs.webkit.org/show_bug.cgi?id=68220

Reviewed by Oliver Hunt.
        
Weak handle processing can result in new objects being marked, which
results in new WeakReferencesHarvesters being added. But weak
reference harvesters are only processed before weak handle processing,
so there's the risk that a weak reference harvester will persist
until the next collection, by which time it may have been deleted.

* heap/Heap.cpp:
(JSC::Heap::markRoots):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (95307 => 95308)


--- trunk/Source/_javascript_Core/ChangeLog	2011-09-16 18:32:01 UTC (rev 95307)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-09-16 18:43:25 UTC (rev 95308)
@@ -1,3 +1,20 @@
+2011-09-16  Filip Pizlo  <fpi...@apple.com>
+
+        REGRESSION: Reproducible crash below SlotVisitor::harvestWeakReferences
+        using Domino's online ordering
+        https://bugs.webkit.org/show_bug.cgi?id=68220
+
+        Reviewed by Oliver Hunt.
+        
+        Weak handle processing can result in new objects being marked, which
+        results in new WeakReferencesHarvesters being added. But weak
+        reference harvesters are only processed before weak handle processing,
+        so there's the risk that a weak reference harvester will persist
+        until the next collection, by which time it may have been deleted.
+
+        * heap/Heap.cpp:
+        (JSC::Heap::markRoots):
+
 2011-09-16  Csaba Osztrogonác  <o...@webkit.org>
 
         REGRESSION(r95201): It made two tests fail

Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (95307 => 95308)


--- trunk/Source/_javascript_Core/heap/Heap.cpp	2011-09-16 18:32:01 UTC (rev 95307)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp	2011-09-16 18:43:25 UTC (rev 95308)
@@ -586,8 +586,6 @@
     m_handleStack.visit(heapRootVisitor);
     visitor.drain();
 
-    harvestWeakReferences();
-
     // Weak handles must be marked last, because their owners use the set of
     // opaque roots to determine reachability.
     int lastOpaqueRootCount;
@@ -598,6 +596,10 @@
     // If the set of opaque roots has grown, more weak handles may have become reachable.
     } while (lastOpaqueRootCount != visitor.opaqueRootCount());
 
+    // Need to call this here because weak handle processing could add weak
+    // reference harvesters.
+    harvestWeakReferences();
+
     visitor.reset();
 
     m_operationInProgress = NoOperation;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to