[ http://issues.apache.org/jira/browse/AXISCPP-549?page=history ]
     
Mark Whitlock closed AXISCPP-549:
---------------------------------

    Resolution: Duplicate

This is a duplicate of AXISCPP-533

> Add RTLD_GLOBAL to dlopen
> -------------------------
>
>          Key: AXISCPP-549
>          URL: http://issues.apache.org/jira/browse/AXISCPP-549
>      Project: Axis-C++
>         Type: Bug
>     Reporter: Mark Whitlock
>     Assignee: Mark Whitlock

>
> Committing fix on behalf of Tim Bartley. He wrote....
> Hi Mark, 
> That wasn't the (only) problem. Eventually I tracked it down. It's because 
> the shared libraries are not loaded with the RTLD_GLOBAL flag. Because of 
> this the type definition of the exception thrown in the channel library is 
> considered different to the type definition (of the same class) in the 
> transport library. This causes flushOutput to generate a call to the 
> unhandled exception handler because it's not considered a matching exception. 
> The fix is to add RTLD_GLOBAL to the flags passed to dlopen as defined in 
> PlatformSpecificUnix.hpp. See http://gcc.gnu.org/faq.html#dso for details as 
> to why this is necessary. 
> Incidentally HTTPTransport::flushOutput is incorrectly declared. It has code 
> that throws (well, rethrows) AxisExceptions but it is declared to only throw 
> HTTPTransportExceptions. (Re)Throwing an AxisException should result in the 
> C++ "unexpected()" being called which will abort the process by default. That 
> is, any code that does: 
> class BaseE {}; 
> class SubE : public BaseE {}; 
> void f() throw(SubE) 
> { 
>         throw BaseE(); 
> } 
> int main() 
> { 
>         try { 
>                 f(); 
>         } 
>         catch (SubE& e) { 
>                 cout << "Caught sub" << endl; 
>         } 
>         catch (BaseE&e ) { 
>                 cout << "Caught base" << endl; 
>         } 
> }
> should, according to the C++ spec, abort. f should be declared throw(BaseE) 
> and then it can throw either BaseE's or SubE's and callers can catch either. 
> Cheers, 
> Tim
> --
> IBM Tivoli Access Manager Development
> Gold Coast Development Lab, Australia
> +61-7-5552-4001 phone
> +61-7-5571-0420 fax 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira

Reply via email to