Changeset 253500 in webkit for trunk/Source/JavaScriptCore/heap
- Timestamp:
- Dec 13, 2019, 2:37:52 PM (5 years ago)
- Location:
- trunk/Source/JavaScriptCore/heap
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/heap/Heap.cpp
r253244 r253500 2436 2436 } 2437 2437 2438 void Heap::addFinalizer(JSCell* cell, Finalizer finalizer) 2439 { 2440 WeakSet::allocate(cell, &m_finalizerOwner, reinterpret_cast<void*>(finalizer)); // Balanced by FinalizerOwner::finalize(). 2441 } 2442 2443 void Heap::FinalizerOwner::finalize(Handle<Unknown> handle, void* context) 2438 void Heap::addFinalizer(JSCell* cell, CFinalizer finalizer) 2439 { 2440 WeakSet::allocate(cell, &m_cFinalizerOwner, bitwise_cast<void*>(finalizer)); // Balanced by CFinalizerOwner::finalize(). 2441 } 2442 2443 void Heap::addFinalizer(JSCell* cell, LambdaFinalizer function) 2444 { 2445 WeakSet::allocate(cell, &m_lambdaFinalizerOwner, function.leakImpl()); // Balanced by LambdaFinalizerOwner::finalize(). 2446 } 2447 2448 void Heap::CFinalizerOwner::finalize(Handle<Unknown> handle, void* context) 2444 2449 { 2445 2450 HandleSlot slot = handle.slot(); 2446 Finalizer finalizer = reinterpret_cast<Finalizer>(context); 2451 CFinalizer finalizer = bitwise_cast<CFinalizer>(context); 2452 finalizer(slot->asCell()); 2453 WeakSet::deallocate(WeakImpl::asWeakImpl(slot)); 2454 } 2455 2456 void Heap::LambdaFinalizerOwner::finalize(Handle<Unknown> handle, void* context) 2457 { 2458 LambdaFinalizer::Impl* impl = bitwise_cast<LambdaFinalizer::Impl*>(context); 2459 LambdaFinalizer finalizer(impl); 2460 HandleSlot slot = handle.slot(); 2447 2461 finalizer(slot->asCell()); 2448 2462 WeakSet::deallocate(WeakImpl::asWeakImpl(slot)); -
trunk/Source/JavaScriptCore/heap/Heap.h
r253244 r253500 172 172 JS_EXPORT_PRIVATE bool isCurrentThreadBusy(); 173 173 174 typedef void (*Finalizer)(JSCell*); 175 JS_EXPORT_PRIVATE void addFinalizer(JSCell*, Finalizer); 174 typedef void (*CFinalizer)(JSCell*); 175 JS_EXPORT_PRIVATE void addFinalizer(JSCell*, CFinalizer); 176 using LambdaFinalizer = WTF::Function<void(JSCell*)>; 177 JS_EXPORT_PRIVATE void addFinalizer(JSCell*, LambdaFinalizer); 176 178 177 179 void notifyIsSafeToCollect(); … … 432 434 static constexpr size_t minExtraMemory = 256; 433 435 434 class FinalizerOwner : public WeakHandleOwner { 436 class CFinalizerOwner : public WeakHandleOwner { 437 void finalize(Handle<Unknown>, void* context) override; 438 }; 439 440 class LambdaFinalizerOwner : public WeakHandleOwner { 435 441 void finalize(Handle<Unknown>, void* context) override; 436 442 }; … … 635 641 std::unique_ptr<CodeBlockSet> m_codeBlocks; 636 642 std::unique_ptr<JITStubRoutineSet> m_jitStubRoutines; 637 FinalizerOwner m_finalizerOwner; 643 CFinalizerOwner m_cFinalizerOwner; 644 LambdaFinalizerOwner m_lambdaFinalizerOwner; 638 645 639 646 Lock m_parallelSlotVisitorLock;
Note:
See TracChangeset
for help on using the changeset viewer.