summaryrefslogtreecommitdiffstats
path: root/src/xmlpatterns/parser
diff options
context:
space:
mode:
authorNiklas Kurkisuo <ext-niklas.kurkisuo@nokia.com>2010-12-03 11:50:36 (GMT)
committerDavid Boddie <david.boddie@nokia.com>2011-05-13 13:56:29 (GMT)
commit23267553627ac3c4cbcd918283bee8e665deeff9 (patch)
tree9301d656c9cd80c81192538231f0731c0b3c7850 /src/xmlpatterns/parser
parent3d27a19ca009836b812b59c3359db1369d391181 (diff)
downloadQt-23267553627ac3c4cbcd918283bee8e665deeff9.zip
Qt-23267553627ac3c4cbcd918283bee8e665deeff9.tar.gz
Qt-23267553627ac3c4cbcd918283bee8e665deeff9.tar.bz2
Fix memory leak in QXmlQuery::setQuery.
There is a circular reference dependency between VariableDeclaration and the classes EvaluationCache, ExpressionVariableReference and TemplateParameterReference. By removing the explicitly shared pointer of VariableDeclaration in these classes the circle is broken and memory is freed correctly. Task-number: QT-4106 Integrated-by: David Boddie
Diffstat (limited to 'src/xmlpatterns/parser')
-rw-r--r--src/xmlpatterns/parser/qquerytransformparser.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/xmlpatterns/parser/qquerytransformparser.cpp b/src/xmlpatterns/parser/qquerytransformparser.cpp
index 4858e11..f937904 100644
--- a/src/xmlpatterns/parser/qquerytransformparser.cpp
+++ b/src/xmlpatterns/parser/qquerytransformparser.cpp
@@ -988,9 +988,9 @@ static Expression::Ptr pushVariable(const QXmlName name,
* In some cases the EvaluationCache instance isn't necessary, but in those cases EvaluationCache
* optimizes itself away. */
if(type == VariableDeclaration::ExpressionVariable)
- checked = create(new EvaluationCache<false>(checked, var, parseInfo->allocateCacheSlot()), sourceLocator, parseInfo);
+ checked = create(new EvaluationCache<false>(checked, var.data(), parseInfo->allocateCacheSlot()), sourceLocator, parseInfo);
else if(type == VariableDeclaration::GlobalVariable)
- checked = create(new EvaluationCache<true>(checked, var, parseInfo->allocateCacheSlot()), sourceLocator, parseInfo);
+ checked = create(new EvaluationCache<true>(checked, var.data(), parseInfo->allocateCacheSlot()), sourceLocator, parseInfo);
var->setExpression(checked);
@@ -1042,7 +1042,7 @@ static Expression::Ptr resolveVariable(const QXmlName &name,
* mechanism must. */
case VariableDeclaration::ExpressionVariable:
{
- retval = create(new ExpressionVariableReference(var->slot, var), sourceLocator, parseInfo);
+ retval = create(new ExpressionVariableReference(var->slot, var.data()), sourceLocator, parseInfo);
break;
}
case VariableDeclaration::FunctionArgument:
@@ -1057,7 +1057,7 @@ static Expression::Ptr resolveVariable(const QXmlName &name,
}
case VariableDeclaration::TemplateParameter:
{
- retval = create(new TemplateParameterReference(var), sourceLocator, parseInfo);
+ retval = create(new TemplateParameterReference(var.data()), sourceLocator, parseInfo);
break;
}
case VariableDeclaration::ExternalVariable: