You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by bu...@apache.org on 2002/01/09 20:51:06 UTC

DO NOT REPLY [Bug 5767] New: - xerces-C crashes on a multiprocessor machine running Solaris 5.7

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5767>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5767

xerces-C crashes on a multiprocessor machine running Solaris 5.7

           Summary: xerces-C crashes on a multiprocessor machine running
                    Solaris 5.7
           Product: Xerces-C++
           Version: 1.5.2
          Platform: Sun
        OS/Version: Solaris
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: Non-Validating Parser
        AssignedTo: xerces-c-dev@xml.apache.org
        ReportedBy: tprzydrozny@moneyline.com


Used gcc/g++ compiler version 2.8.1 to compile both Xerces library 
as well as the test programs.

Till recently we built and ran our multi-threaded processes that 
use Xerces-C library on a single-processor SPARC machines that run Solaris 2.7. 
In that environment we never had a problem with multiple threads running 
separate instances of DOM parser. 
Since we switched to a multiprocessor machine ( 8 CPUs) 
[SunOS mldevapps2 5.7 Generic_106541-12 sun4u sparc SUNW,Ultra-Enterprise]
xerces crashes often. 
We were able to reproduce the crashes with our own test programs as well as 
with the ThreadTest program included in Xcerces distribution.
All versions of Xerces that we tested (i.e. 1.1, 1.3, 1.4 and 1.5.2) crash 
under 
the same circumstaces.
 
Xerces crashes when multiple threads parse XML simultaneously each using 
its own instance of a DOM parser object. 
Here is a snippet of code from our test program that each thread executes: 
...........
...........
...........
 void* parseXml
    (void*             arg)
{
    DOMParser          parser;
    ParseErrorReporter errReporter;
    string             xmlBuffer;

    fileToString  (gFilename, xmlBuffer);
    MemBufInputSource  memBuf ((const XMLByte*)xmlBuffer.c_str(),
        xmlBuffer.size(), "ma1stepapi", false);

    parser.setErrorHandler (&errReporter);
    parser.setDoValidation (gDoValidation);
    try {
        cerr << "parsing...";
        parser.parse (memBuf);
        cerr << "done\n";
    }
    catch (const XMLException& e){
        string error = (const char*)e.getMessage();
        cerr << "Parsing error: " << endl << error << endl;
        return 0;
    }
    return 0;
}
......
......
......

The test programs CRASH ONLY WHEN AN EXTERNAL DTD IS SPECIFIED. 
As long DTD is included inside of the XML file or is not specified at all 
the test programs never crash. 
Here is what a stack trace looks like in a typical crash for version 1.3 of 
Xerces:

#0  0xff046424 in _free_unlocked () from /usr/lib/libc.so.1
#1  0xff0463dc in free () from /usr/lib/libc.so.1
#2  0xff154d10 in ___builtin_delete (ptr=0x2) 
from /usr/local/lib/libstdc++.so.2.8.1
#3  0xff154d90 in ___builtin_vec_delete (ptr=0x2) 
from /usr/local/lib/libstdc++.so.2.8.1
#4  0xff2943d4 in XMLURL::cleanup (this=0xfe9097c8) at XMLURL.cpp:681
#5  0xff2932e0 in XMLURL::~XMLURL (this=0xfe9097c8, __in_chrg=2) at 
XMLURL.cpp:360
#6  0xff293928 in XMLURL::setURL (this=0x1, baseURL=0x2e970, relativeURL=0x2) 
at XMLURL.cpp:464
#7  0xff258560 in ReaderMgr::getSpaces (this=0x419f8, toFill=@0x2e970) at 
ReaderMgr.cpp:164
#8  0xff21a23c in DTDValidator::scanExtSubsetDecl (this=0x97f90, 
inIncludeSect=false) at DTDValidator2.cpp:2527
#9  0xff216668 in DTDValidator::scanDocTypeDecl (this=0x97f90, 
reuseValidator=false) at DTDValidator2.cpp:1680
#10 0xff210970 in DTDValidator::scanDTD (this=0x97f90, reuseValidator=false) at 
DTDValidator.cpp:774
#11 0xff285fa0 in XMLScanner::scanProlog (this=0x41988) at XMLScanner.cpp:1885
#12 0xff27fea0 in XMLScanner::scanDocument (this=0x41988, src=@0xfe909cd8, 
reuseValidator=false)
    at XMLScanner.cpp:284
#13 0xff1f7ec0 in DOMParser::parse (this=0xfe909d08, source=@0xfe909cd8, 
reuseValidator=false) at DOMParser.cpp:253
#14 0x15c18 in parseXml ()

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org