Enzo Arlati wrote:
Thanks for the fast answer.

The code was an attempt to isolate a memory leak, but I add the extra error 
that you have pointed out, so my test were wrong.

However I found my real problem, and my lack od memory were caused by the 
missing deletion of XercesDomParser object.

In a procedure A I buld a DOMDOcument from a XercesDOMParser->getDocmennt().
Then in other procedures I use the DOMDocument object and then I release it but 
I didn't delete the XercesDomParser object.

It is not enough release only DOMDocuemnt to release also XercesDOMParser , is 
this right ?

That's correct; if you don't release the XercesDOMParser you are not deleting everything.

Now I keep track also of the XercesDOMParser obejct and I delete it, and I have 
no more memory leak.

By the way, if I have a DOMDOcument object create using 
XercesDOMParser->getDocmennt(), is there a DOMDocument obejct which return me a 
reference to the original XercesDOMParser object ?

No, you cannot get the parser from the document; but you can use adoptDocument instead of getDocument, so that you can release the parser as soon as the parsing ends, and later release the document when you are done with it. Otherwise, using getDocument, you must *not* release the document because it will be automatically released when releasing the parser.

Alberto

reagrds, Enzo


-----Messaggio originale-----
Da: Alberto Massari [mailto:[email protected]]
Inviato: giovedì 8 gennaio 2009 11.11
A: [email protected]
Oggetto: Re: R: parse memory leak


Hi Enzo,
every parsed file is stored in a cache (unless you invoke adoptDocument to decide to own its lifetime by yourself); the cache is emptied when you call release() on the parser object. Your code doesn't release neither the parser or the error handler; try printing the memory allocated after you delete both objects.

Alberto

Enzo Arlati wrote:
I have xerces 2.7 on a redhat 7.3 and I have a memory leak of about 12 k when I run the parse() method of XercesDOMParser .
Belowe I copy the code involved.
Is there an error in the code or is this a bug ? /*****************************************************************************************/
int
util_xerces::BuildDomParser( XercesDOMParser ** domParser )
{
  int       iret;
( *domParser ) = new XercesDOMParser;
  ( *domParser )->setValidationScheme( XercesDOMParser::Val_Auto );
  ( *domParser )->setDoNamespaces( false );
  ( *domParser )->setDoSchema( false );
  ( *domParser )->setValidationSchemaFullChecking( false );
  ( *domParser )->setCreateEntityReferenceNodes( true );
iret = IRET_OK;
  return iret;
} // _________ void util_xerces::BuildDomParser( ) /*****************************************************************************************/




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to