[webkit-changes] cvs commit: WebCore/khtml/xml dom_nodeimpl.cpp

Timothy thatcher at opensource.apple.com
Wed Sep 28 11:24:50 PDT 2005


thatcher    05/09/28 11:24:50

  Modified:    .        Tag: Safari-2-0-branch ChangeLog
               khtml/editing Tag: Safari-2-0-branch markup.cpp
               khtml/html Tag: Safari-2-0-branch html_elementimpl.cpp
                        html_tableimpl.cpp
               khtml/rendering Tag: Safari-2-0-branch render_block.cpp
                        render_container.cpp render_text.cpp render_text.h
               khtml/xml Tag: Safari-2-0-branch dom_nodeimpl.cpp
  Log:
          Merge over of various leak fixes from TOT to Safari-2-0-branch
  
          <rdar://problem/4231952> leaks of DOMStringImpl called from HTMLTokenizer::processToken, seen running WebKit tests
          <rdar://problem/4231978> many leaks of StyleSurroundData called beneath RenderStyle::setMarginTop, seen running webkit tests
          <rdar://problem/4232017> many leaks of StyleInheritedData called from different RenderStyle methods, seen running webkit tests
          <rdar://problem/4232175> leak of RenderObject called from RenderContainer::updatePseudoChild, seen running webkit tests
          <rdar://problem/4232214> many leaks of RenderStyle from CSSStyleSelector::pseudoStyleForElement, seen running webkit tests
          <rdar://problem/4232252> many leaks of RenderStyle called beneath NodeImpl::createRendererIfNeeded, seen running webkit tests
          <rdar://problem/4232263> many leaks of RenderObject called from TextImpl::createRenderer, seen running webkit tests
          <rdar://problem/4232303> many objects leaked from HTMLTokenizer::parseTag() within -[WebView paste:], seen running webkit tests (probably affects Mail)
          <rdar://problem/4232355> leak of DOMStringImpl called from RenderTextFragment::originalString, seen running webkit tests
          <rdar://problem/4232371> leak of DOMStringImpl called from DOMStringImpl::substring, seen running webkit tests
          <rdar://problem/4232588> many leaks beneath ApplyStyleCommand::mergeEndWithNextIfIdentical, seen running webkit tests (probably affects Mail)
          <rdar://problem/4232812> leaks of NodeImpl called from HTMLParser::textCreateErrorCheck, seen running webkit tests
          <rdar://problem/4233683> leaks of NodeImpl called from HTMLElementImpl::setOuterText, seen running webkit tests
          <rdar://problem/4233690> leaks of StyleBackgroundData called within setBackgroundColor, seen running webkit tests
          <rdar://problem/4233701> leaks inside QFontMetrics::setFont, seen running webkit tests
          <rdar://problem/4233800> leak inside DOM::DocumentImpl::DocumentImpl, seen running webkit tests
          <rdar://problem/4236218> many leaks of StyleBaseImpl within -[WebCoreBridge markupStringFromRange:nodes:] within -[WebHTMLView copy:]
          <rdar://problem/4238024> leak of DocumentFragmentImpl if parseXMLDocumentFragment fails
          <rdar://problem/4241457> many callers of removeChild are leaking the removed node
  
          * khtml/editing/markup.cpp:
          (khtml::createMarkup):
          * khtml/html/html_elementimpl.cpp:
          (HTMLElementImpl::setOuterHTML):
          (HTMLElementImpl::setOuterText):
          * khtml/html/html_tableimpl.cpp:
          (HTMLTableElementImpl::setCaption):
          (HTMLTableElementImpl::setTHead):
          (HTMLTableElementImpl::setTFoot):
          (HTMLTableElementImpl::setTBody):
          * khtml/rendering/render_block.cpp:
          (khtml::RenderBlock::updateFirstLetter):
          * khtml/rendering/render_container.cpp:
          (RenderContainer::updatePseudoChild):
          * khtml/rendering/render_text.cpp:
          (RenderText::setStyle):
          (RenderText::originalString):
          (RenderTextFragment::originalString):
          * khtml/rendering/render_text.h:
          * khtml/xml/dom_nodeimpl.cpp:
          (NodeImpl::remove):
          (NodeImpl::normalize):
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.29  +47 -0     WebCore/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebCore/ChangeLog,v
  retrieving revision 1.1.2.28
  retrieving revision 1.1.2.29
  diff -u -r1.1.2.28 -r1.1.2.29
  --- ChangeLog	16 Sep 2005 19:28:08 -0000	1.1.2.28
  +++ ChangeLog	28 Sep 2005 18:24:38 -0000	1.1.2.29
  @@ -1,3 +1,50 @@
  +2005-09-28  Timothy Hatcher  <timothy at apple.com>
  +
  +        Merge over of various leak fixes from TOT to Safari-2-0-branch
  +
  +        <rdar://problem/4231952> leaks of DOMStringImpl called from HTMLTokenizer::processToken, seen running WebKit tests
  +        <rdar://problem/4231978> many leaks of StyleSurroundData called beneath RenderStyle::setMarginTop, seen running webkit tests
  +        <rdar://problem/4232017> many leaks of StyleInheritedData called from different RenderStyle methods, seen running webkit tests
  +        <rdar://problem/4232175> leak of RenderObject called from RenderContainer::updatePseudoChild, seen running webkit tests
  +        <rdar://problem/4232214> many leaks of RenderStyle from CSSStyleSelector::pseudoStyleForElement, seen running webkit tests
  +        <rdar://problem/4232252> many leaks of RenderStyle called beneath NodeImpl::createRendererIfNeeded, seen running webkit tests
  +        <rdar://problem/4232263> many leaks of RenderObject called from TextImpl::createRenderer, seen running webkit tests
  +        <rdar://problem/4232303> many objects leaked from HTMLTokenizer::parseTag() within -[WebView paste:], seen running webkit tests (probably affects Mail)
  +        <rdar://problem/4232355> leak of DOMStringImpl called from RenderTextFragment::originalString, seen running webkit tests
  +        <rdar://problem/4232371> leak of DOMStringImpl called from DOMStringImpl::substring, seen running webkit tests
  +        <rdar://problem/4232588> many leaks beneath ApplyStyleCommand::mergeEndWithNextIfIdentical, seen running webkit tests (probably affects Mail)
  +        <rdar://problem/4232812> leaks of NodeImpl called from HTMLParser::textCreateErrorCheck, seen running webkit tests
  +        <rdar://problem/4233683> leaks of NodeImpl called from HTMLElementImpl::setOuterText, seen running webkit tests
  +        <rdar://problem/4233690> leaks of StyleBackgroundData called within setBackgroundColor, seen running webkit tests
  +        <rdar://problem/4233701> leaks inside QFontMetrics::setFont, seen running webkit tests
  +        <rdar://problem/4233800> leak inside DOM::DocumentImpl::DocumentImpl, seen running webkit tests
  +        <rdar://problem/4236218> many leaks of StyleBaseImpl within -[WebCoreBridge markupStringFromRange:nodes:] within -[WebHTMLView copy:]
  +        <rdar://problem/4238024> leak of DocumentFragmentImpl if parseXMLDocumentFragment fails
  +        <rdar://problem/4241457> many callers of removeChild are leaking the removed node
  +
  +        * khtml/editing/markup.cpp:
  +        (khtml::createMarkup):
  +        * khtml/html/html_elementimpl.cpp:
  +        (HTMLElementImpl::setOuterHTML):
  +        (HTMLElementImpl::setOuterText):
  +        * khtml/html/html_tableimpl.cpp:
  +        (HTMLTableElementImpl::setCaption):
  +        (HTMLTableElementImpl::setTHead):
  +        (HTMLTableElementImpl::setTFoot):
  +        (HTMLTableElementImpl::setTBody):
  +        * khtml/rendering/render_block.cpp:
  +        (khtml::RenderBlock::updateFirstLetter):
  +        * khtml/rendering/render_container.cpp:
  +        (RenderContainer::updatePseudoChild):
  +        * khtml/rendering/render_text.cpp:
  +        (RenderText::setStyle):
  +        (RenderText::originalString):
  +        (RenderTextFragment::originalString):
  +        * khtml/rendering/render_text.h:
  +        * khtml/xml/dom_nodeimpl.cpp:
  +        (NodeImpl::remove):
  +        (NodeImpl::normalize):
  +
   2005-09-16  Timothy Hatcher  <timothy at apple.com>
   
           Merged fix from TOT to Safari-2-0-branch
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.17.8.5  +3 -1      WebCore/khtml/editing/markup.cpp
  
  Index: markup.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/markup.cpp,v
  retrieving revision 1.17.8.4
  retrieving revision 1.17.8.5
  diff -u -r1.17.8.4 -r1.17.8.5
  --- markup.cpp	27 Aug 2005 17:41:46 -0000	1.17.8.4
  +++ markup.cpp	28 Sep 2005 18:24:42 -0000	1.17.8.5
  @@ -344,8 +344,10 @@
       VisiblePosition visibleStart(range->startPosition(), VP_DEFAULT_AFFINITY);
       VisiblePosition visibleEnd(range->endPosition(), VP_DEFAULT_AFFINITY);
       if (isEndOfBlock(visibleStart)) {
  -        if (visibleStart == visibleEnd.previous())
  +        if (visibleStart == visibleEnd.previous()) {
  +            defaultStyle->deref();
               return interchangeNewlineString;
  +        }
           markups.append(interchangeNewlineString);
           startNode = startNode->traverseNextNode();
       }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.76.8.4  +7 -5      WebCore/khtml/html/html_elementimpl.cpp
  
  Index: html_elementimpl.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/html/html_elementimpl.cpp,v
  retrieving revision 1.76.8.3
  retrieving revision 1.76.8.4
  diff -u -r1.76.8.3 -r1.76.8.4
  --- html_elementimpl.cpp	12 Jul 2005 21:16:34 -0000	1.76.8.3
  +++ html_elementimpl.cpp	28 Sep 2005 18:24:43 -0000	1.76.8.4
  @@ -872,9 +872,9 @@
       
       int ec = 0;
       
  -    if (parentNode()) {
  -        parentNode()->replaceChild(fragment, this, ec);
  -    }
  +    ref();
  +    parent->replaceChild(fragment, this, ec);
  +    deref();
       
       return !ec;
   }
  @@ -943,7 +943,9 @@
   
       TextImpl *t = new TextImpl( docPtr(), text );
       int ec = 0;
  +    ref();
       parent->replaceChild(t, this, ec);
  +    deref();
   
       if ( ec )
           return false;
  @@ -953,7 +955,7 @@
       if (prev && prev->isTextNode()) {
   	TextImpl *textPrev = static_cast<TextImpl *>(prev);
   	textPrev->appendData(t->data(), ec);
  -	t->parentNode()->removeChild(t, ec);
  +	t->remove(ec);
   	t = textPrev;
       }
   
  @@ -965,7 +967,7 @@
       if (next && next->isTextNode()) {
   	TextImpl *textNext = static_cast<TextImpl *>(next);
   	t->appendData(textNext->data(), ec);
  -	textNext->parentNode()->removeChild(textNext, ec);
  +	textNext->remove(ec);
       }
   
       if ( ec )
  
  
  
  1.49.8.3  +28 -26    WebCore/khtml/html/html_tableimpl.cpp
  
  Index: html_tableimpl.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/html/html_tableimpl.cpp,v
  retrieving revision 1.49.8.2
  retrieving revision 1.49.8.3
  diff -u -r1.49.8.2 -r1.49.8.3
  --- html_tableimpl.cpp	2 Aug 2005 23:10:56 -0000	1.49.8.2
  +++ html_tableimpl.cpp	28 Sep 2005 18:24:43 -0000	1.49.8.3
  @@ -82,13 +82,14 @@
   NodeImpl* HTMLTableElementImpl::setCaption( HTMLTableCaptionElementImpl *c )
   {
       int exceptioncode = 0;
  -    NodeImpl* r;
  -    if(tCaption) {
  -        replaceChild ( c, tCaption, exceptioncode );
  +    NodeImpl *r;
  +    if (NodeImpl *oc = tCaption) {
  +        oc->ref();
  +        replaceChild(c, oc, exceptioncode);
  +        oc->deref();
           r = c;
  -    }
  -    else
  -        r = insertBefore( c, firstChild(), exceptioncode );
  +    } else
  +        r = insertBefore(c, firstChild(), exceptioncode);
       tCaption = c;
       return r;
   }
  @@ -96,17 +97,18 @@
   NodeImpl* HTMLTableElementImpl::setTHead( HTMLTableSectionElementImpl *s )
   {
       int exceptioncode = 0;
  -    NodeImpl* r;
  -    if(head) {
  -        replaceChild( s, head, exceptioncode );
  +    NodeImpl *r;
  +    if (NodeImpl *h = head) {
  +        h->ref();
  +        replaceChild(s, h, exceptioncode);
  +        h->deref();
           r = s;
  -    }
  -    else if( foot )
  -        r = insertBefore( s, foot, exceptioncode );
  -    else if( firstBody )
  -        r = insertBefore( s, firstBody, exceptioncode );
  +    } else if (foot)
  +        r = insertBefore(s, foot, exceptioncode);
  +    else if (firstBody)
  +        r = insertBefore(s, firstBody, exceptioncode);
       else
  -        r = appendChild( s, exceptioncode );
  +        r = appendChild(s, exceptioncode);
   
       head = s;
       return r;
  @@ -116,13 +118,15 @@
   {
       int exceptioncode = 0;
       NodeImpl* r;
  -    if(foot) {
  -        replaceChild ( s, foot, exceptioncode );
  +    if (NodeImpl *f = foot) {
  +        f->ref();
  +        replaceChild(s, f, exceptioncode);
  +        f->deref();
           r = s;
  -    } else if( firstBody )
  -        r = insertBefore( s, firstBody, exceptioncode );
  +    } else if (firstBody)
  +        r = insertBefore(s, firstBody, exceptioncode);
       else
  -        r = appendChild( s, exceptioncode );
  +        r = appendChild(s, exceptioncode);
       foot = s;
       return r;
   }
  @@ -131,16 +135,14 @@
   {
       int exceptioncode = 0;
       NodeImpl* r;
  -
       s->ref();
  -    if(firstBody) {
  -        replaceChild ( s, firstBody, exceptioncode );
  -        firstBody->deref();
  +    if (NodeImpl *fb = firstBody) {
  +        replaceChild(s, fb, exceptioncode);
  +        fb->deref();
           r = s;
       } else
  -        r = appendChild( s, exceptioncode );
  +        r = appendChild(s, exceptioncode);
       firstBody = s;
  -
       return r;
   }
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.179.8.5 +6 -4      WebCore/khtml/rendering/render_block.cpp
  
  Index: render_block.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_block.cpp,v
  retrieving revision 1.179.8.4
  retrieving revision 1.179.8.5
  diff -u -r1.179.8.4 -r1.179.8.5
  --- render_block.cpp	9 Aug 2005 23:52:15 -0000	1.179.8.4
  +++ render_block.cpp	28 Sep 2005 18:24:44 -0000	1.179.8.5
  @@ -3280,10 +3280,10 @@
           // The original string is going to be either a generated content string or a DOM node's
           // string.  We want the original string before it got transformed in case first-letter has
           // no text-transform or a different text-transform applied to it.
  -        DOMStringImpl* oldText = textObj->originalString();
  +        SharedPtr<DOMStringImpl> oldText = textObj->originalString();
           KHTMLAssert(oldText);
           
  -        if (oldText && oldText->l >= 1) {
  +        if (oldText.notNull() && oldText->l >= 1) {
               unsigned int length = 0;
               while ( length < oldText->l &&
                       ( (oldText->s+length)->isSpace() || (oldText->s+length)->isPunct() ) )
  @@ -3292,7 +3292,7 @@
               //kdDebug( 6040 ) << "letter= '" << DOMString(oldText->substring(0,length)).string() << "'" << endl;
               
               RenderTextFragment* remainingText = 
  -                new (renderArena()) RenderTextFragment(textObj->node(), oldText, length, oldText->l-length);
  +                new (renderArena()) RenderTextFragment(textObj->node(), oldText.get(), length, oldText->l-length);
               remainingText->setStyle(textObj->style());
               if (remainingText->element())
                   remainingText->element()->setRenderer(remainingText);
  @@ -3302,11 +3302,13 @@
               firstLetterContainer->addChild(remainingText, nextObj);
               
               RenderTextFragment* letter = 
  -                new (renderArena()) RenderTextFragment(remainingText->node(), oldText, 0, length);
  +                new (renderArena()) RenderTextFragment(remainingText->node(), oldText.get(), 0, length);
               RenderStyle* newStyle = new (renderArena()) RenderStyle();
               newStyle->inheritFrom(pseudoStyle);
               letter->setStyle(newStyle);
               firstLetter->addChild(letter);
  +
  +            textObj->detach();
           }
       }
   }
  
  
  
  1.66.8.1  +1 -0      WebCore/khtml/rendering/render_container.cpp
  
  Index: render_container.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_container.cpp,v
  retrieving revision 1.66
  retrieving revision 1.66.8.1
  diff -u -r1.66 -r1.66.8.1
  --- render_container.cpp	14 Feb 2005 18:19:18 -0000	1.66
  +++ render_container.cpp	28 Sep 2005 18:24:45 -0000	1.66.8.1
  @@ -243,6 +243,7 @@
           if (child && child->style()->styleType() == type) {
               oldContentPresent = false;
               removeChild(child);
  +            child->detach();
               child = (type == RenderStyle::BEFORE) ? firstChild() : lastChild();
           }
       }
  
  
  
  1.177.8.4 +7 -7      WebCore/khtml/rendering/render_text.cpp
  
  Index: render_text.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_text.cpp,v
  retrieving revision 1.177.8.3
  retrieving revision 1.177.8.4
  diff -u -r1.177.8.3 -r1.177.8.4
  --- render_text.cpp	5 Aug 2005 18:01:24 -0000	1.177.8.3
  +++ render_text.cpp	28 Sep 2005 18:24:45 -0000	1.177.8.4
  @@ -799,9 +799,9 @@
           RenderObject::setStyle( _style );
   
           if (needToTransformText) {
  -            DOM::DOMStringImpl* textToTransform = originalString();
  -            if (textToTransform)
  -                setText(textToTransform, true);
  +            SharedPtr<DOMStringImpl> textToTransform = originalString();
  +            if (textToTransform.notNull())
  +                setText(textToTransform.get(), true);
           }
   #if APPLE_CHANGES
           // setText also calls cacheWidths(), so there is no need to call it again in that case.
  @@ -894,9 +894,9 @@
       return false;
   }
   
  -DOM::DOMStringImpl* RenderText::originalString() const
  +SharedPtr<DOMStringImpl> RenderText::originalString() const
   {
  -    return element() ? element()->string() : 0;
  +    return element() ? SharedPtr<DOMStringImpl>(element()->string()) : SharedPtr<DOMStringImpl>();
   }
   
   void RenderText::absoluteRects(QValueList<QRect>& rects, int _tx, int _ty)
  @@ -1881,7 +1881,7 @@
       return true;
   }
   
  -DOM::DOMStringImpl* RenderTextFragment::originalString() const
  +SharedPtr<DOMStringImpl> RenderTextFragment::originalString() const
   {
       DOM::DOMStringImpl* result = 0;
       if (element())
  @@ -1890,7 +1890,7 @@
           result = contentString();
       if (result && (start() > 0 || start() < result->l))
           result = result->substring(start(), end());
  -    return result;
  +    return SharedPtr<DOMStringImpl>(result);
   }
   #undef BIDI_DEBUG
   #undef DEBUG_LAYOUT
  
  
  
  1.77.8.3  +2 -2      WebCore/khtml/rendering/render_text.h
  
  Index: render_text.h
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/rendering/render_text.h,v
  retrieving revision 1.77.8.2
  retrieving revision 1.77.8.3
  diff -u -r1.77.8.2 -r1.77.8.3
  --- render_text.h	5 Aug 2005 18:01:24 -0000	1.77.8.2
  +++ render_text.h	28 Sep 2005 18:24:46 -0000	1.77.8.3
  @@ -161,7 +161,7 @@
       virtual ~RenderText();
   
       virtual bool isTextFragment() const;
  -    virtual DOM::DOMStringImpl* originalString() const;
  +    virtual SharedPtr<DOM::DOMStringImpl> originalString() const;
       
       virtual const char *renderName() const { return "RenderText"; }
   
  @@ -326,7 +326,7 @@
       uint end() const { return m_end; }
       
       DOM::DOMStringImpl* contentString() const { return m_generatedContentStr; }
  -    virtual DOM::DOMStringImpl* originalString() const;
  +    virtual SharedPtr<DOM::DOMStringImpl> originalString() const;
       
   private:
       uint m_start;
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.140.8.10 +6 -7      WebCore/khtml/xml/dom_nodeimpl.cpp
  
  Index: dom_nodeimpl.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/xml/dom_nodeimpl.cpp,v
  retrieving revision 1.140.8.9
  retrieving revision 1.140.8.10
  diff -u -r1.140.8.9 -r1.140.8.10
  --- dom_nodeimpl.cpp	16 Sep 2005 18:18:34 -0000	1.140.8.9
  +++ dom_nodeimpl.cpp	28 Sep 2005 18:24:48 -0000	1.140.8.10
  @@ -203,13 +203,12 @@
   
   void NodeImpl::remove(int &exceptioncode)
   {
  -    exceptioncode = 0;
  -    if (!parentNode()) {
  +    ref();
  +    if (NodeImpl *p = parentNode())
  +        p->removeChild(this, exceptioncode);
  +    else
           exceptioncode = DOMException::HIERARCHY_REQUEST_ERR;
  -        return;
  -    }
  -    
  -    parentNode()->removeChild(this, exceptioncode);
  +    deref();
   }
   
   bool NodeImpl::hasChildNodes(  ) const
  @@ -237,7 +236,7 @@
               if (exceptioncode)
                   return;
   
  -            removeChild(nextChild,exceptioncode);
  +            nextChild->remove(exceptioncode);
               if (exceptioncode)
                   return;
           }
  
  
  



More information about the webkit-changes mailing list