Changeset 100242 in webkit
- Timestamp:
- Nov 14, 2011, 10:58:19 PM (15 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
heap/Heap.cpp (modified) (2 diffs)
-
heap/ListableHandler.h (modified) (2 diffs)
-
heap/MarkStack.cpp (modified) (2 diffs)
-
heap/MarkStack.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r100227 r100242 1 2011-11-14 Filip Pizlo <fpizlo@apple.com> 2 3 Weak reference harvesters should run to fixpoint 4 https://bugs.webkit.org/show_bug.cgi?id=72346 5 6 Reviewed by Oliver Hunt. 7 8 * heap/Heap.cpp: 9 (JSC::Heap::markRoots): 10 * heap/ListableHandler.h: 11 (JSC::ListableHandler::next): 12 (JSC::ListableHandler::List::head): 13 (JSC::ListableHandler::List::removeNext): 14 (JSC::ListableHandler::List::removeAll): 15 * heap/MarkStack.cpp: 16 (JSC::MarkStackThreadSharedData::reset): 17 (JSC::SlotVisitor::harvestWeakReferences): 18 * heap/MarkStack.h: 19 (JSC::MarkStack::isEmpty): 20 1 21 2011-11-14 Oliver Hunt <oliver@apple.com> 2 22 -
trunk/Source/JavaScriptCore/heap/Heap.cpp
r99898 r100242 685 685 { 686 686 GCPHASE(VisitingWeakHandles); 687 int lastOpaqueRootCount; 688 do { 689 lastOpaqueRootCount = visitor.opaqueRootCount(); 687 while (true) { 690 688 m_handleHeap.visitWeakHandles(heapRootVisitor); 689 harvestWeakReferences(); 690 if (visitor.isEmpty()) 691 break; 691 692 { 692 693 ParallelModeEnabler enabler(visitor); … … 696 697 #endif 697 698 } 698 // If the set of opaque roots has grown, more weak handles may have become reachable. 699 } while (lastOpaqueRootCount != visitor.opaqueRootCount()); 699 } 700 700 } 701 701 GCCOUNTER(VisitedValueCount, visitor.visitCount()); 702 703 {704 GCPHASE(HarvestWeakReferences);705 harvestWeakReferences();706 }707 702 708 703 visitor.reset(); -
trunk/Source/JavaScriptCore/heap/ListableHandler.h
r99898 r100242 43 43 44 44 virtual ~ListableHandler() { } 45 46 T* next() const 47 { 48 return reinterpret_cast<T*>(m_nextAndFlag & ~1); 49 } 45 50 46 51 private: … … 73 78 } 74 79 80 T* head() 81 { 82 return m_first; 83 } 84 75 85 T* removeNext() 76 86 { 77 87 T* current = m_first; 78 T* next = reinterpret_cast<T*>(current->m_nextAndFlag & ~1);88 T* next = current->next(); 79 89 current->m_nextAndFlag = 0; 80 90 m_first = next; 81 91 return current; 92 } 93 94 void removeAll() 95 { 96 while (hasNext()) 97 removeNext(); 82 98 } 83 99 -
trunk/Source/JavaScriptCore/heap/MarkStack.cpp
r99898 r100242 272 272 ASSERT(m_opaqueRoots.isEmpty()); 273 273 #endif 274 275 m_weakReferenceHarvesters.removeAll(); 274 276 } 275 277 … … 450 452 void SlotVisitor::harvestWeakReferences() 451 453 { 452 while (m_shared.m_weakReferenceHarvesters.hasNext())453 m_shared.m_weakReferenceHarvesters.removeNext()->visitWeakReferences(*this);454 for (WeakReferenceHarvester* current = m_shared.m_weakReferenceHarvesters.head(); current; current = current->next()) 455 current->visitWeakReferences(*this); 454 456 } 455 457 -
trunk/Source/JavaScriptCore/heap/MarkStack.h
r99898 r100242 220 220 bool containsOpaqueRoot(void*); 221 221 int opaqueRootCount(); 222 223 bool isEmpty() { return m_stack.isEmpty(); } 222 224 223 225 void reset();
Note:
See TracChangeset
for help on using the changeset viewer.