diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-11-24 14:05:58 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-11-24 20:56:44 +0100 |
commit | 2a7fa39bc1fb3a81fdcc632853aef224f4793f8a (patch) | |
tree | 2f88f9e25cb776492f529590b2bce59f8115bda5 /package/source | |
parent | bd43062c98be535b37031b2bdae4af856f392eee (diff) |
fix attempt to save and rethrow exception
Change-Id: Idff6ffef536d87d85f1092b3316d65da83527711
Reviewed-on: https://gerrit.libreoffice.org/45229
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'package/source')
-rw-r--r-- | package/source/zipapi/XBufferedThreadedStream.cxx | 20 | ||||
-rw-r--r-- | package/source/zipapi/XBufferedThreadedStream.hxx | 4 |
2 files changed, 7 insertions, 17 deletions
diff --git a/package/source/zipapi/XBufferedThreadedStream.cxx b/package/source/zipapi/XBufferedThreadedStream.cxx index 82bb992f0128..2c36b73ea409 100644 --- a/package/source/zipapi/XBufferedThreadedStream.cxx +++ b/package/source/zipapi/XBufferedThreadedStream.cxx @@ -9,6 +9,7 @@ #include "XBufferedThreadedStream.hxx" #include <com/sun/star/packages/zip/ZipIOException.hpp> +#include <cppuhelper/exc_hlp.hxx> using namespace css::uno; using com::sun::star::packages::zip::ZipIOException; @@ -27,20 +28,10 @@ private: { mxStream.produce(); } - catch( const RuntimeException &e ) - { - SAL_WARN("package", "RuntimeException from unbuffered Stream " << e ); - mxStream.saveException( new RuntimeException( e ) ); - } - catch( const ZipIOException &e ) - { - SAL_WARN("package", "ZipIOException from unbuffered Stream " << e ); - mxStream.saveException( new ZipIOException( e ) ); - } - catch( const Exception &e ) + catch (const css::uno::Exception &e) { SAL_WARN("package", "Unexpected " << e ); - mxStream.saveException( new Exception( e ) ); + mxStream.saveException(cppu::getCaughtException()); } mxStream.setTerminateThread(); @@ -58,7 +49,6 @@ XBufferedThreadedStream::XBufferedThreadedStream( , mnOffset( 0 ) , mxUnzippingThread( new UnzippingThread(*this) ) , mbTerminateThread( false ) -, maSavedException( nullptr ) { mxUnzippingThread->launch(); } @@ -116,8 +106,8 @@ const Buffer& XBufferedThreadedStream::getNextBlock() if( maPendingBuffers.empty() ) { maInUseBuffer = Buffer(); - if( maSavedException ) - throw *maSavedException; + if (maSavedException.hasValue()) + cppu::throwException(maSavedException); } else { diff --git a/package/source/zipapi/XBufferedThreadedStream.hxx b/package/source/zipapi/XBufferedThreadedStream.hxx index 8bf3c5eb1283..b99864fbb268 100644 --- a/package/source/zipapi/XBufferedThreadedStream.hxx +++ b/package/source/zipapi/XBufferedThreadedStream.hxx @@ -37,7 +37,7 @@ private: std::condition_variable maBufferProduceResume; bool mbTerminateThread; /// indicates the failure of one of the threads - css::uno::Exception *maSavedException; /// exception caught during unzipping is saved to be thrown during reading + css::uno::Any maSavedException; /// exception caught during unzipping is saved to be thrown during reading static const size_t nBufferLowWater = 2; static const size_t nBufferHighWater = 4; @@ -66,7 +66,7 @@ public: void produce(); void setTerminateThread(); - void saveException( css::uno::Exception *e ) { maSavedException = e; } + void saveException(const css::uno::Any &rAny) { maSavedException = rAny; } // XInputStream virtual sal_Int32 SAL_CALL readBytes( css::uno::Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead ) override; |