XML DOM parser does not release memory on parser:release and resetDocumentPool()
--------------------------------------------------------------------------------
Key: XERCESC-1589
URL: http://issues.apache.org/jira/browse/XERCESC-1589
Project: Xerces-C++
Type: Bug
Components: DOM
Versions: 2.4.0
Environment: HP-Tandem-NonStop Kernel
Reporter: Rinil Baxi
1) Use the following code:
/home/Rinil/Xml/dom [2441]: more mleak.cpp
#include < string.h>
#include < cextdecs.h>
#include < iostream>
#include < xercesc/util/PlatformUtils.hpp>
#include < xercesc/parsers/AbstractDOMParser.hpp>
#include < xercesc/dom/DOMImplementation.hpp>
#include < xercesc/dom/DOMImplementationLS.hpp>
#include < xercesc/dom/DOMImplementationRegistry.hpp>
#include < xercesc/dom/DOMBuilder.hpp>
#include < xercesc/dom/DOMException.hpp>
#include < xercesc/dom/DOMDocument.hpp>
#include < xercesc/dom/DOMNodeList.hpp>
#include < xercesc/dom/DOMError.hpp>
#include < xercesc/dom/DOMLocator.hpp>
#include < xercesc/dom/DOMWriter.hpp>
#include < xercesc/framework/StdOutFormatTarget.hpp>
#include < xercesc/framework/LocalFileFormatTarget.hpp>
#include < xercesc/framework/MemBufInputSource.hpp>
#include < xercesc/framework/Wrapper4InputSource.hpp>
#include < xercesc/parsers/XercesDOMParser.hpp>
#include < xercesc/util/XMLUni.hpp>
#include < xercesc/util/XMLException.hpp>
unsigned long getMemUsage ()
{
short gError = 0;
short myHandle[10];
short attrList[10];
short valList[10];
short valMaxLen = 10;
short valLen = 0;
short attrs = 0;
unsigned long *memUsage;
gError = PROCESSHANDLE_GETMINE_ (&myHandle[0]);
if (gError)
return 0;35%)
memset (&attrList[0], '\0', 10);
memset (&valList[0], '\0', 10);
attrList[attrs] = 111;
attrs++;
gError = PROCESS_GETINFOLIST_
(,,,,&myHandle[0]
,&attrList[0]
,attrs
,&valList[0]
,valMaxLen
,&valLen
);
if (gError)
return 0;
memUsage = (unsigned long *) (&valList[0]);
return *memUsage;
}
int main()
{
DOMImplementation *impl;
DOMBuilder *parser;
DOMDocument *doc;
const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
std::cout < < "\nMEMUSAGE at Start : "< < getMemUsage();
// Initialize the XML system
try {
XMLPlatformUtils::Initialize();
XMLPlatformUtils::recognizeNEL(false);
}
catch (const XMLException& toCatch) {
return 1;
}
impl = DOMImplementationRegistry::getDOMImplementation(gLS);
parser =
((DOMImplementationLS*)impl)->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS,
0);
if (parser == NULL) {
//Its known that XML system must be terminated before returning
return 1;
}
parser->setFeature(XMLUni::fgDOMNamespaces,true);
parser->setFeature(XMLUni::fgXercesSchema, false);
parser->setFeature(XMLUni::fgXercesSchemaFullChecking, false);
parser->setFeature(XMLUni::fgDOMValidateIfSchema, false);
parser->setFeature(XMLUni::fgDOMDatatypeNormalization, true);
//Reset Document Pool
parser->resetDocumentPool();
std::cout< < "\nMEMUSAGE before parsing: "< < getMemUsage();
//Parse XML and get document
try{
doc = parser->parseURI("personal.xml");
}
catch(DOMException dome){
//Its known that XML system must be terminated before returning
return 1;
}
std::cout< < "\nMEMUSAGE after parsing: "< < getMemUsage();
//Reset Document Pool
parser->resetDocumentPool();
std::cout< < "\nMEMUSAGE after resetDocumentpool(): "< < getMemUsage();
//Release Parser
//This should also release DOMDOcument associated i.e. doc
parser->release();
std::cout< < "\nMEMUSAGE after parser release(): "< < getMemUsage();
XMLPlatformUtils::Terminate();
std::cout< < "\nMEMUSAGE after Terminate(): "< < getMemUsage()< < std::endl;
return 0;
}
/home/Rinil/xml/dom [2442]:
2) Compile using Makefiles provided with XML samples.
3) Place a xml file to be parsed in the CWD. ie personal.xml which comes with
the samples.
4) run mleak:
/home/RinilXml/dom [2452]: ./mleak
MEMUSAGE at Start : 16384
MEMUSAGE before parsing: 57344
MEMUSAGE after parsing: 245888
MEMUSAGE after resetDocumentpool(): 245888
MEMUSAGE after parser release(): 245888
MEMUSAGE after Terminate(): 245888
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]