David  thank you for response my question ,

1. this is core dump stack trace

  -- Last Stack Trace
---------------------------------------------------------------
.() at 0x0
XMLString.transcode__Q2_11xercesc_2_89XMLStringFCPCcCPQ2_11xercesc_2_813MemoryManager()
 at 0x10108810
InputSource.__ct__Q2_11xercesc_2_811InputSourceFCPCcCPQ2_11xercesc_2_813MemoryManager()
 at 0x101afc98
MemBufInputSource.__ct__Q2_11xercesc_2_817MemBufInputSourceFCPCUcCUiCPCcCbCPQ2_11xercesc_2_813MemoryManager()
 at 0x102fccfc
bss_ECNS_parseXML.bss_ECNS_parseXML__15BS_PPTManager_iFR25bssObjXMLparse_out_structRC21pptObjCommonIn_structPCcRC28_IDL_SEQUENCE_xmlContextInfoRC22_IDL_SEQUENCE_pptUData(0x3319b4d8,
 0x33776108, 0x3378e0f8, 0x34922988, 0x337a8100, 0x337a8110) at 0x1009af10

2. I use while loop for parse xml string , and combine xmlstring

3. In my parse XML function I already defind  inline function X for release
XMLString::transcode
    class XStr
{
public :
    XStr(const char* const toTranscode)
    {
        fUnicodeForm = XMLString::transcode(toTranscode);
    }
    ~XStr()
    {
        XMLString::release(&fUnicodeForm);
    }
    const XMLCh* unicodeForm() const
    {
        return fUnicodeForm;
    }
private :
    XMLCh*   fUnicodeForm;
};

#define X(str) XStr(str).unicodeForm()

4. mem_controlx is smart point object
   for control memory from XMLString::transcode( XML CH * ) return



Best Regards, Sincerely



|--------------------------------->
|            David Bertoni        |
|            <[EMAIL PROTECTED]>|
|                                 |
|                                 |
|            2008/12/09 上午 09:51|
|                                 |
|                                 |
|              Please respond to  |
|            [EMAIL PROTECTED]|
|                     rg          |
|                                 |
|--------------------------------->
  
>----------------------------------------------------------------------------------------------------------------------|
  |                                                                             
                                         |
  |                                                                             
                                         |
  |                                                                             
                                       To|
  |        [email protected]                                              
                                         |
  |                                                                             
                                       cc|
  |                                                                             
                                         |
  |                                                                             
                                  Subject|
  |        Re: MemBufInputSource Core Dump                                      
                                         |
  |                                                                             
                                         |
  |                                                                             
                                         |
  |                                                                             
                                         |
  |                                                                             
                                         |
  |                                                                             
                                         |
  
>----------------------------------------------------------------------------------------------------------------------|




[EMAIL PROTECTED] wrote:
> Dear Sir :
>                   I use xerces for parsing XML String , I found some
> question in my test
>
>                  platform : IBM AIX 5.2
>                  complier : IBM VA C++
>                  xerces version : 2-8-0
>
>                 Q1. xerces can support multi-thread ?  ( I found answer
in
> xerces faq from http://xerces.apache.org/xerces-c/faq-parse-3.html#faq-6
)
>                       need you double confirm
Why do you need confirmation?  If you follow the instructions in the
FAQ, you should not have any problems with using Xerces-C in a
multi-threaded application.

>
>                 Q2. In my function , always core dump in ( new
> MemBufInputSource )
OK, please show us the stack trace for the dump.

>                       I use C++ while function for test xerces have
memory
> leak
I'm afraid I don't understand what you're saying.

>
>                 Q3. If I use C++ delete function delete xerces object ,
>                        why xerces still have memory leak  ?
Perhaps the leak is in your code and not in Xerces-C?

>
>                 Q4. MemBufInputSource have limit  usage ?
I'm not sure what you mean by "limit usage."  As long as you use the
class correctly, it should work as designed.

>
>
>                 attach file is my function
>
>
> Source Code
>
=========================================================================================

> try
> {
>     XMLPlatformUtils::Initialize();
>
>     PPT_METHODTRACE_V1( "" , "================== Now Starting Parse XML
> ==================" ) ;
>     string XMLString = (const char * )xmlContextInfoSeq[i].xmlContext ;
I'm not sure why this cast is necessary.  What is the type of
xmlContextInfoSeq[i]xmlContext?

>     string parseString = "";
>     PPT_METHODTRACE_V2( "" , " XMLString :" , XMLString.c_str() );
>
>     string bufferId = "prodInfo" ;
>     MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager;
>     MemoryManager* const manager2 = XMLPlatformUtils::fgMemoryManager;
>
>     MemBufInputSource* memBufIS = new MemBufInputSource ((const
> XMLByte*)XMLString.c_str(),
>
> strlen(XMLString.c_str()),
Why not use XMLString.length() here?

>
bufferId.c_str(),
>                                                          false,
>                                                          manager2
>                                                          );
>
>     DOMInputSource * inSource = new Wrapper4InputSource(memBufIS,true,
> manager);
You have indicated to Wrapper4InputSource that it owns the object
pointed to by "memBufIS," so it will delete the instance in its destructor.

>     DOMImplementation *impl =
> DOMImplementationRegistry::getDOMImplementation(X(""));
>
>     DOMBuilder* parser = ((DOMImplementationLS*)impl)->
> createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
>
>     DOMDocument* xmlDoc;
>     xmlDoc =  parser->parse(*inSource);
>     DOMElement * root = xmlDoc->getDocumentElement();
>     DOMNodeList * list = xmlDoc->getElementsByTagName(X("ObjInfo"));
>
>     //=============================//
>     //  XMLSize_t Use Size_t       //
>     //  default start from value 0 //
>     //=============================//
>     for ( XMLSize_t index_Attr = 0 ; index_Attr < list->getLength() ;
> index_Attr++ )
>     {
>         DOMElement * elem =
> static_cast<DOMElement*>(list->item(index_Attr)) ;
>         string lot_id = "" ;
>         string eqp_id = "" ;
>         string value = "" ;
>
>         objectIdentifier mem_control ;
>         const XMLCh * tmpxmlch = elem->getAttribute(X("ObjType"));
>         mem_control.identifier = XMLString::transcode(tmpxmlch);
You need to call XMLString::release() on the pointer returned by
XMLString::transcode().  I don't know what the type of
mem_control.identifier is, but this could be a leak.

>         value = (const char *)mem_control.identifier ;
Why do you need this cast?

>
>         PPT_METHODTRACE_V2( "" , " Objtype value :" , value.c_str() );
>
>         if ( value == "Equipment" )
>         {
>             objectIdentifier mem_control2 ;
>             const XMLCh * tmpxmlch2 = elem->getAttribute(X("Value"));
>             mem_control2.identifier = XMLString::transcode(tmpxmlch2);
Again, this may be a leak.

>             eqp_id = (const char *)mem_control2.identifier;
Again, why do you need this cast?

>             PPT_METHODTRACE_V2( "" , " eqp_id :" , eqp_id.c_str() );
>             setIDLstring(strObjXMLparse_out.strXMLvalueSeq[i].eqpID ,
> eqp_id ) ;
>             PPT_METHODTRACE_V2( "" , "
> strObjXMLparse_out.strXMLvalueSeq[i].eqpID " ,
> strObjXMLparse_out.strXMLvalueSeq[i].eqpID );
>         }
>         else if ( value == "Lot" )
>         {
>             objectIdentifier mem_control3 ;
>             const XMLCh * tmpxmlch3 = elem->getAttribute(X("Value")) ;
>             mem_control3.identifier = XMLString::transcode(tmpxmlch3);
Perhaps another leak.

>             lot_id = (const char *)mem_control3.identifier ;
Another strange cast.

>             PPT_METHODTRACE_V2( "" , " lot_id :" , lot_id.c_str() );
>
setIDLstring(strObjXMLparse_out.strXMLvalueSeq[i].lotID,lot_id)
> ;
>             PPT_METHODTRACE_V2( "" , "
> strObjXMLparse_out.strXMLvalueSeq[i].lotID " ,
> strObjXMLparse_out.strXMLvalueSeq[i].lotID );
>         }
>
>     }
>     delete inSource ;
>     delete parser ;
>
> }
> catch (const XMLException& toCatch)
> {
>     char* message = XMLString::transcode(toCatch.getMessage());
>     PPT_METHODTRACE_V2( "" , "Error during initialization :" , message );
>     XMLString::release(&message);
>     return 1;
If you return from this path, you will leave the library initialized.
Since you have no other catch handlers, this could be an exception
that's not from the XMLPlatformUtils::Initialize() call.

> }
>
> XMLPlatformUtils::Terminate();
>
> PPT_METHODTRACE_V1( "" , "================== Now Ending Parse XML
> ==================" ) ;
>
>
> Best Regards, Sincerely
>
---------------------------------------------------------------------------

>                                                          TSMC PROPERTY

>  This email communication (and any attachments) is proprietary
information
>  for the sole use of its

>  intended recipient. Any unauthorized review, use or distribution by
anyone
>  other than the intended

>  recipient is strictly prohibited.  If you are not the intended
recipient,
>  please notify the sender by

>  replying to this email, and then delete this email and any copies of it

>  immediately. Thank you.

>
---------------------------------------------------------------------------

>
>
>
>
> ---------------------------------------------------------------------
> 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]



 --------------------------------------------------------------------------- 
                                                         TSMC PROPERTY       
 This email communication (and any attachments) is proprietary information   
 for the sole use of its                                                     
 intended recipient. Any unauthorized review, use or distribution by anyone  
 other than the intended                                                     
 recipient is strictly prohibited.  If you are not the intended recipient,   
 please notify the sender by                                                 
 replying to this email, and then delete this email and any copies of it     
 immediately. Thank you.                                                     
 --------------------------------------------------------------------------- 




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

Reply via email to