You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by "Rinil Baxi (JIRA)" <xe...@xml.apache.org> on 2006/05/31 15:17:30 UTC
[jira] Commented: (XERCESC-1589) XML DOM parser does not release
memory on parser:release and resetDocumentPool()
[ http://issues.apache.org/jira/browse/XERCESC-1589?page=comments#action_12414055 ]
Rinil Baxi commented on XERCESC-1589:
-------------------------------------
Hi,
I am using Xercesc Parser 2.4.0.
The problem (XERCESC-1260 : Memory not released with DOMBuilder::parse() method) persists with the version I am using.
Please guide me, How I can resolve this problem in 2.4.0.
I am not able to use the latest versions due to some production problems.
Kindly reply as soon as possible.
Thanks and Best Regards,
Rinil
> 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: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org