I have reached wits end on this one.
I am running on RedHat 7.1, with gcc's 2.96-112.7.1
I even applied the fix-patch from XERCESC-1162 about base class warnings in
SAXException
I plugged in an eval copy of Purify and got the following:
------------------------------------------------------------------------
**** Purify instrumented PureMyServer (pid 18321 at Thu Nov 18 16:18:57
2004)
* Purify 2003a.06.13 Linux (32-bit) (c) Copyright IBM Corp. 1992, 2004 All
rights reserved.
* For contact information type: "purify -help"
* For TTY output, use the option "-windows=no"
* Command-line: PureMyServer
* Options settings: -g++=yes -purify \
-purify-home=/home/igor/scratch/releases/purify.i386_linux2.2003a.06.13
\
-cache-dir=/home/igor/scratch/releases/purify.i386_linux2.2003a.06.13/cache
\
-hw_cap=yes -language=english
* License successfully checked out.
* Command-line: PureMyServer
**** Purify instrumented PureMyServer (pid 18321) ****
IPR: Invalid pointer read:
* This is occurring while in thread 1026:
xercesc_2_6::XMemory::operator delete(void*) [XMemory.cpp:80]
xercesc_2_6::ValidationContextImpl::~ValidationContextImpl(void)
[ValidationContextImpl.cpp:56]
xercesc_2_6::SchemaInfo::~SchemaInfo(void) [SchemaInfo.cpp:170]
xercesc_2_6::RefHash2KeysTableOf<xercesc_2_6::SchemaInfo>::removeAll(void)
[RefHash2KeysTableOf.c:207]
xercesc_2_6::RefHash2KeysTableOf<xercesc_2_6::SchemaInfo>::~RefHash2KeysTabl
eOf(void) [RefHash2KeysTableOf.c:152]
xercesc_2_6::TraverseSchema::cleanUp(void) [TraverseSchema.cpp:8415]
* Reading 4 bytes from 0x480a9210 between the heap and the stack.
**** Purify instrumented PureMyServer (pid 18321) ****
ZPR: Zero page read:
* This is occurring while in thread 1026:
xercesc_2_6::XMemory::operator delete(void*) [XMemory.cpp:82]
xercesc_2_6::ValidationContextImpl::~ValidationContextImpl(void)
[ValidationContextImpl.cpp:56]
xercesc_2_6::SchemaInfo::~SchemaInfo(void) [SchemaInfo.cpp:170]
xercesc_2_6::RefHash2KeysTableOf<xercesc_2_6::SchemaInfo>::removeAll(void)
[RefHash2KeysTableOf.c:207]
xercesc_2_6::RefHash2KeysTableOf<xercesc_2_6::SchemaInfo>::~RefHash2KeysTabl
eOf(void) [RefHash2KeysTableOf.c:152]
xercesc_2_6::TraverseSchema::cleanUp(void) [TraverseSchema.cpp:8415]
* Reading 4 bytes from 0x3e
**** Purify instrumented PureMyServer (pid 18321) ****
COR: Fatal core dump:
* This is occurring while in thread 1026:
xercesc_2_6::XMemory::operator delete(void*) [XMemory.cpp:82]
xercesc_2_6::ValidationContextImpl::~ValidationContextImpl(void)
[ValidationContextImpl.cpp:56]
xercesc_2_6::SchemaInfo::~SchemaInfo(void) [SchemaInfo.cpp:170]
xercesc_2_6::RefHash2KeysTableOf<xercesc_2_6::SchemaInfo>::removeAll(void)
[RefHash2KeysTableOf.c:207]
xercesc_2_6::RefHash2KeysTableOf<xercesc_2_6::SchemaInfo>::~RefHash2KeysTabl
eOf(void) [RefHash2KeysTableOf.c:152]
xercesc_2_6::TraverseSchema::cleanUp(void) [TraverseSchema.cpp:8415]
* Received signal 11 (SIGSEGV - Segmentation fault)
* Handler function: SIG_DFL
* Faulting address = 0x3e
* Signal mask: (SIGQUIT | SIGTRAP | SIGBUS | SIGFPE | SIGUSR1 | \
SIGSEGV | SIGUSR2 | SIGALRM | SIGTERM | SIGSTKFLT | SIGCHLD | \
SIGCONT | SIGSTOP | SIGSTP | SIGTTIN | SIGTTOU | SIGURG | SIGXCPU | \
SIGXFSZ | SIGVTALRM | SIGPROF | SIGWINCH | SIGIO | SIGPWR | \
SIGReserved32 | SIGReserved35 | SIGReserved36 | SIGReserved37 | \
SIGReserved39 | SIGReserved40 | SIGReserved42 | SIGReserved44 | \
SIGReserved46 | SIGReserved47 | SIGReserved48 | SIGReserved49 | \
SIGReserved50 | SIGReserved51 | SIGReserved52 | SIGReserved53 | \
SIGReserved54 | SIGReserved55 | SIGReserved56 | SIGReserved57 | \
SIGReserved58 | SIGReserved59 | SIGReserved60 | SIGReserved61 | \
SIGReserved62)
* Pending signals: (SIGHUP | SIGQUIT | SIGTRAP | SIGBUS | SIGKILL | \
SIGUSR1 | SIGSEGV | SIGUSR2 | SIGPIPE | SIGALRM | SIGTERM | \
SIGSTKFLT | SIGCHLD | SIGCONT | SIGSTOP | SIGSTP | SIGTTIN | \
SIGTTOU | SIGURG | SIGXCPU | SIGXFSZ | SIGVTALRM | SIGPROF | \
SIGWINCH | SIGIO | SIGPWR | SIGUNUSED | SIGReserved32 | \
SIGReserved36 | SIGReserved37 | SIGReserved39 | SIGReserved41 | \
SIGReserved43 | SIGReserved44 | SIGReserved50 | SIGReserved52 | \
SIGReserved60)
-----Original Message-----
From: White Daniel E CONT DLVA [mailto:[EMAIL PROTECTED]
Sent: Wednesday, November 17, 2004 11:54 AM
To: '[EMAIL PROTECTED]'
Subject: SegFaullt problem
OK, I have an object class definition for a server application
that contains:
//--------------------------------------------------------------------
XercesDOMParser* parser ;
DOMTreeErrorReporter* errReporter ;
//--------------------------------------------------------------------
When I instantiate/open the object, I do this:
//--------------------------------------------------------------------
this->parser = new XercesDOMParser;
this->parser->setDoNamespaces( true );
this->parser->setDoSchema( true );
this->parser->setValidationSchemaFullChecking( true );
this->parser->setValidationScheme( XercesDOMParser::Val_Auto );
this->parser->setCreateEntityReferenceNodes( false );
this->parser->setExternalNoNamespaceSchemaLocation
( /* path to schema file location*/ ) ;
this->errReporter = new DOMTreeErrorReporter();
this->parser->setErrorHandler(this->errReporter);
//--------------------------------------------------------------------
And then I have a method called "validate" that does this:
//--------------------------------------------------------------------
bool myStreamHandler::validate ( int size, const char* buffer )
{
bool rc = true ;
const char* foo = "label" ;
// the error reporter object gets destroyed,
// so it needs to be re-instantiated to reuse this parser
if ( !this->errReporter )
{ this->errReporter = new DOMTreeErrorReporter();
this->parser->setErrorHandler(this->errReporter);
}
// convert the ascii text buffer to a form the parser will accept
MemBufInputSource* memBufIS = new MemBufInputSource
( (const XMLByte*) buffer,
size,
foo,
false
) ;
// validate it
try
{
this->parser->parse( *memBufIS ) ;
if ( this->parser->getErrorCount() > 0 )
{ cerr
<< "Got "
<< this->parser->getErrorCount()
<< " errors"
<< endl ;
rc = false ;
}
}
catch ( const XMLException& e )
{
...
}
catch (const DOMException& e)
{
...
}
catch (...)
{
...
}
// cleanup
delete memBufIS ;
return rc ;
}
//--------------------------------------------------------------------
The problem is that I get occasional Segnentation Faults on either the
creation of the MemBufInputSource object "memBufIS" or when I try to
parse it a few lines later.
I am using Xerces-C 2.6.0
Am I doing this properly or is there a differrent/better way to do it ?
---------------------------------------------------------------------
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]