| Index: Source/core/dom/Node.cpp
|
| diff --git a/Source/core/dom/Node.cpp b/Source/core/dom/Node.cpp
|
| index 0798dda6c5b079fdd35680c844fb3a3dd533d867..8d3cb74b95d525c2638c5d367556aa5070209657 100644
|
| --- a/Source/core/dom/Node.cpp
|
| +++ b/Source/core/dom/Node.cpp
|
| @@ -266,14 +266,18 @@ Node::~Node()
|
| liveNodeSet.remove(this);
|
| #endif
|
|
|
| +#if !ENABLE(OILPAN)
|
| if (hasRareData())
|
| clearRareData();
|
|
|
| RELEASE_ASSERT(!renderer());
|
|
|
| -#if !ENABLE(OILPAN)
|
| if (!isContainerNode())
|
| willBeDeletedFromDocument();
|
| +#else
|
| + // With Oilpan, the rare data finalizer also asserts for
|
| + // this condition (we cannot directly access it here.)
|
| + RELEASE_ASSERT(hasRareData() || !renderer());
|
| #endif
|
|
|
| if (m_previous)
|
| @@ -326,36 +330,32 @@ NodeRareData& Node::ensureRareData()
|
| if (hasRareData())
|
| return *rareData();
|
|
|
| - NodeRareData* data;
|
| if (isElementNode())
|
| - data = ElementRareData::create(m_data.m_renderer).leakPtr();
|
| + m_data.m_rareData = ElementRareData::create(m_data.m_renderer);
|
| else
|
| - data = NodeRareData::create(m_data.m_renderer).leakPtr();
|
| - ASSERT(data);
|
| + m_data.m_rareData = NodeRareData::create(m_data.m_renderer);
|
| +
|
| + ASSERT(m_data.m_rareData);
|
|
|
| - m_data.m_rareData = data;
|
| setFlag(HasRareDataFlag);
|
| - return *data;
|
| + return *rareData();
|
| }
|
|
|
| +#if !ENABLE(OILPAN)
|
| void Node::clearRareData()
|
| {
|
| ASSERT(hasRareData());
|
| ASSERT(!transientMutationObserverRegistry() || transientMutationObserverRegistry()->isEmpty());
|
|
|
| RenderObject* renderer = m_data.m_rareData->renderer();
|
| - if (isElementNode()) {
|
| - ElementRareData* rareData = static_cast<ElementRareData*>(m_data.m_rareData);
|
| - rareData->dispose();
|
| - delete rareData;
|
| - } else {
|
| - NodeRareData* rareData = static_cast<NodeRareData*>(m_data.m_rareData);
|
| - rareData->dispose();
|
| - delete rareData;
|
| - }
|
| + if (isElementNode())
|
| + delete static_cast<ElementRareData*>(m_data.m_rareData);
|
| + else
|
| + delete static_cast<NodeRareData*>(m_data.m_rareData);
|
| m_data.m_renderer = renderer;
|
| clearFlag(HasRareDataFlag);
|
| }
|
| +#endif
|
|
|
| Node* Node::toNode()
|
| {
|
| @@ -2571,6 +2571,9 @@ void Node::setCustomElementState(CustomElementState newState)
|
|
|
| void Node::trace(Visitor* visitor)
|
| {
|
| + if (hasRareData())
|
| + visitor->trace(rareData());
|
| +
|
| visitor->trace(m_treeScope);
|
| }
|
|
|
|
|