+2008-10-16 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Cameron Zwarich.
+
+ - fix for: REGRESSION: over 100 StructureIDs leak loading about:blank (result of fix for bug 21633)
+
+ Apparent slight progression (< 0.5%) on v8 benchmarks and SunSpider.
+
+ * kjs/StructureID.cpp:
+ (JSC::StructureID::~StructureID): Don't deref this object's parent's pointer to
+ itself from the destructor; that doesn't even make sense.
+ (JSC::StructureID::addPropertyTransition): Don't refer the single transition;
+ the rule is that parent StructureIDs are ref'd but child ones are not. Refing
+ the child creates a cycle.
+
2008-10-15 Alexey Proskuryakov <ap@webkit.org>
Reviewed by Darin Adler.
{
if (m_previous) {
if (m_previous->m_usingSingleTransitionSlot) {
- m_previous->m_transitions.singleTransition->deref();
m_previous->m_transitions.singleTransition = 0;
} else {
ASSERT(m_previous->m_transitions.table->contains(make_pair(m_nameInPrevious, m_attributesInPrevious)));
if (m_cachedPropertyNameArrayData)
m_cachedPropertyNameArrayData->setCachedStructureID(0);
- if (m_usingSingleTransitionSlot) {
- if (m_transitions.singleTransition)
- m_transitions.singleTransition->deref();
- } else
+ if (!m_usingSingleTransitionSlot)
delete m_transitions.table;
#ifndef NDEBUG
if (structureID->m_usingSingleTransitionSlot) {
if (!structureID->m_transitions.singleTransition) {
structureID->m_transitions.singleTransition = transition.get();
- transition->ref();
return transition.release();
}
TransitionTable* transitionTable = new TransitionTable;
structureID->m_transitions.table = transitionTable;
transitionTable->add(make_pair(existingTransition->m_nameInPrevious, existingTransition->m_attributesInPrevious), existingTransition);
- existingTransition->deref();
}
structureID->m_transitions.table->add(make_pair(propertyName.ustring().rep(), attributes), transition.get());
return transition.release();