diff options
author | Herbert Dürr <hdu@apache.org> | 2014-03-27 15:50:58 +0000 |
---|---|---|
committer | Herbert Dürr <hdu@apache.org> | 2014-03-27 15:50:58 +0000 |
commit | a5df560f6a44de04a66da1dd05960ff2ee6bd2ba (patch) | |
tree | fbb6fc705dd0efdfb1cf32ff7bc77e06a052215f /ucb | |
parent | 184348f1a82bc70ebf510b03a2ef0537d1cea278 (diff) |
#i124421# force the availability of type_info symbols thrown by the ucb module
When exceptions are passed around in uno::Any types to be thrown later it
was observed on OSX64 that the type_info symbols of these exceptions were
not available anywhere. On most platforms the UNO bridge would synthesize
them by emulating how the platform's toolchain would do it. Forcing the
emission of the type_infos by the real toolchain is much better than
second guessing and reverse engineering its operation.
An even better approach would be to have the ucb throw the exceptions itself
instead of wrapping, rewrapping, unwrapping, etc. them. Once this is done
the dummyThrower helper function is no longer needed.
Notes
Notes:
prefer: d83de4b1a93ba7ed7bc3243073be3de96a44bfa9
Diffstat (limited to 'ucb')
-rw-r--r-- | ucb/source/ucp/webdav/webdavcontent.cxx | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/ucb/source/ucp/webdav/webdavcontent.cxx b/ucb/source/ucp/webdav/webdavcontent.cxx index df558f0e3462..0a418084167f 100644 --- a/ucb/source/ucp/webdav/webdavcontent.cxx +++ b/ucb/source/ucp/webdav/webdavcontent.cxx @@ -3352,6 +3352,23 @@ uno::Any Content::MapDAVException( const DAVException & e, sal_Bool bWrite ) return aException; } +// #i124421# force the availability of type_info symbols for exceptions +// that used to be passed around in uno::Any variables and thrown later +void ucb_dummyThrower( int i) { + switch( i) { + case 10: throw ucb::InteractiveNetworkGeneralException(); + case 11: throw ucb::InteractiveAugmentedIOException(); + case 12: throw ucb::InteractiveNetworkGeneralException(); + case 13: throw ucb::InteractiveNetworkWriteException(); + case 14: throw ucb::InteractiveNetworkReadException(); + case 15: throw ucb::InteractiveNetworkConnectException(); + case 16: throw ucb::InteractiveLockingLockedException(); + case 17: throw ucb::InteractiveLockingNotLockedException(); + case 18: throw ucb::InteractiveNetworkGeneralException(); + case 19: throw ucb::InteractiveLockingLockExpiredException(); + } +} + //========================================================================= // static bool Content::shouldAccessNetworkAfterException( const DAVException & e ) |