Hi Enda,
could you test your code against the latest 2.7 version? This way we can see if was an old (fixed) bug.

Thanks,
Alberto

At 10.54 16/12/2005 +0000, Mannion, Enda wrote:
Hi,

The following code causes a 400K leak each time it is called. It seems to occue in the following line: parser->parse(metaDataFile.c_str());

Has anyone had any similar parse leak issues or does this code look file to you. Also could this code be improved in any way, I very new to this xerces development.


String function()
{

xercesc_2_4::XercesDOMParser* parser = new xercesc_2_4::XercesDOMParser();
if(parser == NULL)
{
      return "";
}

parser->setValidationScheme(xercesc_2_4::XercesDOMParser::Val_Never); // optional.
parser->setDoNamespaces(false);    // optional

xercesc_2_4::ErrorHandler* errHandler = (xercesc_2_4::ErrorHandler*) new xercesc_2_4::HandlerBase();
parser->setErrorHandler(errHandler);

string metaDataFile = GetMetadataFileName(submissionID);

try
{
      // leak seems to occur here
      parser->parse(metaDataFile.c_str());
}

catch (const xercesc_2_4::XMLException& toCatch)
{
char* message = xercesc_2_4::XMLString::transcode(toCatch.getMessage());
      std::cout << "Exception message is: \n" << message << "\n";
      xercesc_2_4::XMLString::release(&message);
}

catch (const xercesc_2_4::DOMException& toCatch)
{
      char* message = xercesc_2_4::XMLString::transcode(toCatch.msg);
      std::cout << "Exception message is: \n" << message << "\n";
      xercesc_2_4::XMLString::release(&message);
}

catch (...)
{
      std::cout << "Unexpected Exception \n";
}

xercesc_2_4::DOMDocument* xmlDoc = parser->getDocument();

if( NULL == xmlDoc )
{
      std::cout<<"xml doc is null, quit\n";
}

xercesc_2_4::DOMNode* docNode = xmlDoc->getDocumentElement();

if( NULL == docNode )
{
      std::cout<<"doc is null, quit\n";
}

xercesc::DOMNodeList* list;
xercesc::DOMNode* node;
const XMLCh* n;
char* xmlval = "";
string szXmlVal = "";


list = xmlDoc->getElementsByTagName( XMLString::transcode(szTag.c_str()) );
node = list->item(0);
if( xercesc::DOMNode::ELEMENT_NODE == node->getNodeType() )
{
      n = node->getFirstChild()->getNodeValue();
      xmlval = xercesc_2_4::XMLString::transcode(n);
      szXmlVal = xmlval;
      xercesc_2_4::XMLString::release(&xmlval);
}

//node->release();
//parser->resetDocumentPool();
delete parser;
delete [] xmlval;
delete errHandler;
return szXmlVal;

}


Can anyone help me remove this leak. It is running in a service and is called every few seconds, so the leak gets quite large quickly.

Enda

________________________
Enda Mannion




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to