[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