[ 
https://issues.apache.org/jira/browse/XERCESC-2031?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14007163#comment-14007163
 ] 

Jimmie Högklint commented on XERCESC-2031:
------------------------------------------

Whoa, that was fast!
I applied the patch on top of xercesc 3.1.1 and it works fine. Thanks

> Janitor<BinInputStream>::~Janitor() throws in unwind
> ----------------------------------------------------
>
>                 Key: XERCESC-2031
>                 URL: https://issues.apache.org/jira/browse/XERCESC-2031
>             Project: Xerces-C++
>          Issue Type: Bug
>          Components: Utilities
>    Affects Versions: 3.1.1
>         Environment: Solaris 10, x86 
>            Reporter: Jimmie Högklint
>            Assignee: Alberto Massari
>             Fix For: 3.2.0
>
>
> If PosixFileMgr::fileClose() receives an invalid file handler or if its 
> unable to close a file handler it will throw an exception. If this is done in 
> an unwind of, for example, Janitor<BinInputStream> noone is around to catch 
> that exception before the process is terminated. (Leaving a destructor with a 
> throw during unwind is rewarded with termination of the process)
> This happens when variable "streamJanitor" goes out of scope in 
> ReaderMgr::createReader(...)
> Callstack looks like this:
> [6] std::terminate(0xfeafd2e3, 0xfe7eb940, 0xfc5c5ce8, 0xfe7eb940, 0x0, 
> 0xfe7eb940), at 0xfe7d471f
> [7] __Cimpl::ex_terminate(0xfedf9290, 0xfee69fd0, 0x2, 0xfe7ec658, 
> 0xfe7ec4a0, 0x0), at 0xfe7d4b82
> [8] _ex_throw_body(0xfe7ec658, 0xfeafd2e3, 0xfc5c5d60, 0xfe7d546e), at 
> 0xfe7d5561
> [9] __Crun::ex_throw(0xfe7ec6a4, 0xfed84ab8, 0xfeb04488, 0xfed82da2), at 
> 0xfe7d54ca
> [10] xercesc_3_1::PosixFileMgr::fileClose(this = 0x8f69a18, f = 0xfe3f2d00, 
> manager = 0x8f69618) (optimized), at 0xfed82e40 (line ~81) in 
> "PosixFileMgr.cpp"
> [11] xercesc_3_1::XMLPlatformUtils::closeFile(theFile = 0xfe3f2d00, memmgr = 
> 0x8f69618) (optimized), at 0xfeb021b9 (line ~578) in "PlatformUtils.cpp"
> [12] xercesc_3_1::BinFileInputStream::~BinFileInputStream(this = 0x91df400) 
> (optimized), at 0xfeafd2de (line ~64) in "BinFileInputStream.cpp"
> [13] __SLIP.DELETER__A(this = 0x91df400, delete = 1) (optimized), at 
> 0xfeafd53e (line ~61) in "BinFileInputStream.cpp"
> [14] xercesc_3_1::Janitor<xercesc_3_1::BinInputStream>::reset(this = 
> 0xfc5c5e84, p = (nil)) (optimized), at 0xfec16fd6 (line ~90) in "Janitor.c"
> [15] xercesc_3_1::Janitor<xercesc_3_1::BinInputStream>::~Janitor(this = 
> 0xfc5c5e84) (optimized), at 0xfec166f8 (line ~43) in "Janitor.c"
> [16] xercesc_3_1::ReaderMgr::createReader(this = 0x930a604, src = CLASS, 
> _ARG3 = true, refFrom = RefFrom_NonLiteral, type = Type_General, source = 
> Source_External, calcSrcOfs = false, lowWaterMark = 100U) (optimized), at 
> 0xfec12ee4 (line ~440) in "ReaderMgr.cpp"
> [17] xercesc_3_1::IGXMLScanner::scanReset(this = 0x930a578, src = CLASS) 
> (optimized), at 0xfec08e7c (line ~1275) in "IGXMLScanner2.cpp"
> [18] xercesc_3_1::IGXMLScanner::scanDocument(this = 0x930a578, src = CLASS) 
> (optimized), at 0xfebfb52e (line ~198) in "IGXMLScanner.cpp"
> [19] xercesc_3_1::AbstractDOMParser::parse(this = 0xfc5c6018, source = CLASS) 
> (optimized), at 0xfec67c34 (line ~545) in "AbstractDOMParser.cpp"
> [20] xercesc_3_1::IGXMLScanner::resolveSchemaGrammar(this = 0x9283f68, loc = 
> 0x93c4b3c, uri = 0x93c5020, ignoreLoadSchema = true) (optimized), at 
> 0xfec0a8d0 (line ~1859) in "IGXMLScanner2.cpp"
> [21] xercesc_3_1::IGXMLScanner::parseSchemaLocation(this = 0x9283f68, 
> schemaLocationStr = 0x9627e10, ignoreLoadSchema = true) (optimized), at 
> 0xfec0a0b4 (line ~1727) in "IGXMLScanner2.cpp"
> [22] xercesc_3_1::IGXMLScanner::scanStartTagNS(this = 0x9283f68, gotData = 
> true) (optimized), at 0xfebff71a (line ~2205) in "IGXMLScanner.cpp"
> [23] xercesc_3_1::IGXMLScanner::scanContent(this = 0x9283f68) (optimized), at 
> 0xfebfcb7b (line ~890) in "IGXMLScanner.cpp"
> [24] xercesc_3_1::IGXMLScanner::scanDocument(this = 0x9283f68, src = CLASS) 
> (optimized), at 0xfebfb571 (line ~217) in "IGXMLScanner.cpp"
> [25] xercesc_3_1::AbstractDOMParser::parse(this = 0x92e6e50, source = CLASS) 
> (optimized), at 0xfec67c34 (line ~545) in "AbstractDOMParser.cpp"
> [26] xercesc_3_1::DOMLSParserImpl::parse(this = 0x92e6e50, source = 
> 0xfc5c6718) (optimized), at 0xfec714ce (line ~754) in "DOMLSParserImpl.cpp"
> This applies to WindowsFileMgr as well.
> If additional information is needed I'm happy to provide it.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

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

Reply via email to