Uploaded image for project: 'Axis-C++'
  1. Axis-C++
  2. AXISCPP-533

Inter shared library exception handling broken on Linux

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Reopened
    • Major
    • Resolution: Unresolved
    • current (nightly)
    • None
    • Basic Architecture
    • None
    • GNU specific (as far as I know)

    Description

      On Linux, actually on systems where the compiler and common libraries are g++ and gnu and glibc, exception handling between shared libraries is broken. It is broken because the same class in different shared libraries is treated differently so that an HTTPTransportException thrown by a channel library does not match "catch (HTTPTransportException& e)" in the transport library.

      Refer to http://gcc.gnu.org/faq.html#dso for details.

      The fix is to load the subordinate library with RTLD_GLOBAL flag.

      As far as I know this is GNU specific but may apply to other platforms.

      It's possible that others are not seeing this because the context in which I am running Axis is from within an application that itself dynamically loads a library that depends on Axis.

      Cheers,

      Tim

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            tbartley@au1.ibm.com Tim Bartley

            Dates

              Created:
              Updated:

              Slack

                Issue deployment