2006-04-25 Eric Seidel <eseidel@apple.com>
authoreseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 25 Apr 2006 19:32:34 +0000 (19:32 +0000)
committereseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 25 Apr 2006 19:32:34 +0000 (19:32 +0000)
        Reviewed by ggaren.

        Fixes for our 3rd and 5th most common crashtracers:
        <rdar://problem/4233435> CrashTracer: 2698 crashes in Safari at com.apple.WebCore: khtml::RenderBlock::addChildToFlow + 156
        <rdar://problem/4129744> [REGRESSION]CrashTracer: ..400 crashes at com.apple.WebCore: DOM::NodeImpl::createRendererIfNeeded + 44

        Test case landed on trunk but not on branch.

        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::setFocusNode): use m_inDetach bool copied from trunk
        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::NodeImpl):
        (NodeImpl::detach): set m_inDetach
        (NodeImpl::createRendererIfNeeded):
        (NodeBaseImpl::removeChildren): remove node from tree before calling detach.
        * khtml/xml/dom_nodeimpl.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@14054 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/dom/ContainerNode.cpp

index 647be93d131a1c4ec29f0b06da916f9288dcfe84..731bb507b193942b1e80818703b83d9e6370d057 100644 (file)
@@ -1,3 +1,18 @@
+2006-04-25  Eric Seidel  <eseidel@apple.com>
+
+        Reviewed by ggaren.
+
+        Make trunk match the branch.  Now nodes are fully removed
+        from the tree before calling detach.  There is (thankfully) no
+        good way to test this, as no one should depend on this behavior.
+        This change was made are part of fixing:
+        <rdar://problem/4427024> repro crash on www.formassembly.com in khtml::RenderBlock::addChildToFlow
+        <rdar://problem/4233435> CrashTracer: 2698 crashes in Safari at com.apple.WebCore: khtml::RenderBlock::addChildToFlow + 156
+        on the branch.
+
+        * dom/ContainerNode.cpp:
+        (WebCore::ContainerNode::removeChildren):
+
 2006-04-25  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Adele.
index 870b3f5061052c417bda411afa5c0b7635693eff..83eccc05010f88d5b9eaff9adae7e30f80c9e569 100644 (file)
@@ -442,8 +442,7 @@ void ContainerNode::removeChildren()
         
         n->ref();
 
-        if (n->attached())
-            n->detach();
+        // Remove the node from the tree before calling detach or removedFromDocument (4427024, 4129744)
         n->setPreviousSibling(0);
         n->setNextSibling(0);
         n->setParent(0);
@@ -451,6 +450,9 @@ void ContainerNode::removeChildren()
         m_firstChild = next;
         if (n == m_lastChild)
             m_lastChild = 0;
+
+        if (n->attached())
+            n->detach();
         
         if (n->inDocument())
             n->removedFromDocument();