Ignore:
Timestamp:
Oct 5, 2011, 3:44:36 PM (14 years ago)
Author:
[email protected]
Message:

Added a simpler mechanism for registering one-off finalizers
https://bugs.webkit.org/show_bug.cgi?id=69466

Reviewed by Oliver Hunt.

  • heap/Heap.cpp:

(JSC::Heap::addFinalizer):
(JSC::Heap::FinalizerOwner::finalize):

  • heap/Heap.h: New function for adding an arbitrary finalizer for an

arbitrary cell without declaring any special classes or Handles yourself.

  • runtime/Executable.cpp:

(JSC::ExecutableBase::clearCode):
(JSC::ExecutableBase::clearCodeVirtual):
(JSC::EvalExecutable::clearCodeVirtual):
(JSC::ProgramExecutable::clearCodeVirtual):
(JSC::FunctionExecutable::discardCode):
(JSC::FunctionExecutable::clearCodeVirtual):

  • runtime/Executable.h:

(JSC::ExecutableBase::finishCreation): Use the new mechanism for eager
finalization of executables.

  • runtime/JSGlobalObject.cpp:

(JSC::JSGlobalObject::clearRareData):

  • runtime/JSGlobalObject.h:

(JSC::JSGlobalObject::createRareDataIfNeeded):
(JSC::JSGlobalObject::registerWeakMap): Use the new mechanism for eager
finalization of weak maps.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h

    r96755 r96760  
    5858        typedef HashSet<RefPtr<OpaqueJSWeakObjectMap> > WeakMapSet;
    5959
    60         class WeakMapsFinalizer : public WeakHandleOwner {
    61         public:
    62             virtual void finalize(Handle<Unknown>, void* context);
    63         };
    64 
    6560        struct JSGlobalObjectRareData {
    6661            JSGlobalObjectRareData()
     
    7166            WeakMapSet weakMaps;
    7267            unsigned profileGroup;
    73             Weak<JSGlobalObject> weakMapsFinalizer;
    7468        };
    7569
     
    129123
    130124        OwnPtr<JSGlobalObjectRareData> m_rareData;
    131         static WeakMapsFinalizer* weakMapsFinalizer();
    132125
    133126        WeakRandom m_weakRandom;
     
    139132        void createRareDataIfNeeded()
    140133        {
    141             if (!m_rareData)
    142                 m_rareData = adoptPtr(new JSGlobalObjectRareData);
     134            if (m_rareData)
     135                return;
     136            m_rareData = adoptPtr(new JSGlobalObjectRareData);
     137            Heap::heap(this)->addFinalizer(this, clearRareData);
    143138        }
    144139       
     
    281276        {
    282277            createRareDataIfNeeded();
    283             if (!m_rareData->weakMapsFinalizer)
    284                 m_rareData->weakMapsFinalizer.set(globalData(), this, weakMapsFinalizer());
    285278            m_rareData->weakMaps.add(map);
    286279        }
     
    317310
    318311        void setRegisters(WriteBarrier<Unknown>* registers, PassOwnArrayPtr<WriteBarrier<Unknown> > registerArray, size_t count);
     312        static void clearRareData(JSCell*);
    319313    };
    320314
Note: See TracChangeset for help on using the changeset viewer.