You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2003/01/24 17:50:18 UTC
DO NOT REPLY [Bug 16397] New: -
XObjectFactoryDefault::::reset() don't clear m_xstringCache
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16397>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16397
XObjectFactoryDefault::::reset() don't clear m_xstringCache
Summary: XObjectFactoryDefault::::reset() don't clear
m_xstringCache
Product: XalanC
Version: 1.4.x
Platform: PC
OS/Version: Other
Status: NEW
Severity: Blocker
Priority: Other
Component: XPathC
AssignedTo: xalan-dev@xml.apache.org
ReportedBy: sebastien.jeanbourquin@ch.delarue.com
When I use the sample SimpleXPathAPI with a small modification:
for(int i = 0; i < 3; i++) // Add a loop to get the same path 3 times
{
// OK, let's evaluate the expression...
const XObjectPtr theResult(
theEvaluator.evaluate(
theDOMSupport,
theContextNode,
XalanDOMString(argv[3]).c_str(),
theDocument->getDocumentElement()));
assert(theResult.null() == false);
cout << "The string value of the result is:"
<< endl
<< theResult->str()
<< endl
<< endl;
}
With a simple path like:
shiporder/item/price
the sample work fine.
With a more complex path like:
shiporder/item[@number=\"2\"]/price[@area=\"asia\"]
I get an assert on the second time in the loop.
I try to debug it an I find something in:
XObjectFactoryDefault::reset()
{
m_xstringAdapterAllocator.reset();
m_xstringAllocator.reset(); //Was reseted
// but not m_xstringCache.clear();
m_xstringReferenceAllocator.reset();
m_xnumberAllocator.reset();
m_xnodesetAllocator.reset();
#if !defined(XALAN_NO_NAMESPACES)
using std::for_each;
#endif
for_each(m_xobjects.begin(),
m_xobjects.end(),
DeleteXObjectFunctor(*this, true));
m_xobjects.clear();
m_xnumberCache.clear();
m_xnodesetCache.clear();
// m_xstringCache.clear();?
}
If I clear m_xstringCache the sample work fine