This implementation (code below )  leaks memory on solaris (when we call it 
serveral times) with xerces 2.7 and also xerces 2.8  , does anyone see a 
problem with it ...
 if we remove the DOMDocument importNode function call it stops leaking ..We 
are especialy interested in fixing this with xerces 2.7


Also NOTE :  we do release the importing document at the end but that does not 
free up the memory either. 
 
 All help is appreciated .

 Thanks
 -Anurag
>
>    string xml = <some large xml>;// around 200 KB
>     DOMNode* returnNode = NULL;
>     DOMNode* newNode = NULL;
>     XMLCh id[7];
>     try{
>         string idString="xmlDoc";
> 
>         XMLString::transcode((const char*)idString.c_str(),id,6);
>         MemBufInputSource* mbis = new (XMLPlatformUtils::fgMemoryManager) 
> MemBufInputSource  ( (const XMLByte*)xml.c_str(),
>                                 (unsigned int)xml.length(),
>                                 id,
>                                 false,XMLPlatformUtils::fgMemoryManager );
>         mbis->setCopyBufToStream(false);
>         //xercesc::XercesDOMParser * parser= new xercesc::XercesDOMParser;
>         XercesDOMParser *parser = new (XMLPlatformUtils::fgMemoryManager) 
> XercesDOMParser(0,XMLPlatformUtils::fgMemoryManager);
> 
>         parser->parse( *mbis );
>         newNode = parser->getDocument()->getDocumentElement();
>         if(!newNode){
>             delete mbis;
>             delete parser;
>             throw FrmError(xml.c_str(),"Can not parse DOM node","",ERR_MARK);
>         }
> 
>         returnNode = getDocument()->importNode( newNode, true ); // 
> getDocument returns our internal document 
>         parser->resetDocumentPool();
>         delete mbis;
>         delete parser;
>     }catch(SAXException e){
>         void* msg = 
> XMLString::transcode(e.getMessage(),XMLPlatformUtils::fgMemoryManager);
>         string error=(char*)msg;
>         XMLString::release((void**)&msg,XMLPlatformUtils::fgMemoryManager);
>         throw FrmError(error,"","",ERR_MARK);
>     }catch(DOMException e){
>         void* msg = 
> XMLString::transcode(e.msg,XMLPlatformUtils::fgMemoryManager);
>         string error=(char*)msg;
>         XMLString::release((void**)&msg,XMLPlatformUtils::fgMemoryManager);
>         throw FrmError(error,"","",ERR_MARK);
>     }
>     if(!returnNode){
>         //throw FrmError("Can not allocate DOM Node","","",ERR_MARK);
>     }
>     return (returnNode);


_________________________________________________________________
Climb to the top of the charts! Play the word scramble challenge with star 
power.
http://club.live.com/star_shuffle.aspx?icid=starshuffle_wlmailtextlink_jan

Reply via email to