diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-06-05 11:45:36 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-06-05 11:46:47 +0100 |
commit | 05661623c7e328c536814354bafd8294de0e9ee0 (patch) | |
tree | 2a3418903402afcf1b15bb0bb55671806fec70ba /package/source | |
parent | 1af10d4012aa84a26568bac42bb47a267342afd5 (diff) |
uncaught exceptions in parallel deflate threads on re-export of HTB23106 odgs
Change-Id: Ib6aef478b8dcf1c7a7262ab60eef4d44da0de632
Diffstat (limited to 'package/source')
-rw-r--r-- | package/source/zipapi/ZipOutputStream.cxx | 6 | ||||
-rw-r--r-- | package/source/zippackage/ZipPackageStream.cxx | 12 |
2 files changed, 16 insertions, 2 deletions
diff --git a/package/source/zipapi/ZipOutputStream.cxx b/package/source/zipapi/ZipOutputStream.cxx index 7c7924d63ea7..4acfa77f0124 100644 --- a/package/source/zipapi/ZipOutputStream.cxx +++ b/package/source/zipapi/ZipOutputStream.cxx @@ -23,6 +23,7 @@ #include <com/sun/star/io/XInputStream.hpp> #include <com/sun/star/io/XOutputStream.hpp> #include <comphelper/storagehelper.hxx> +#include <cppuhelper/exc_hlp.hxx> #include <osl/diagnose.h> #include <osl/time.h> @@ -101,6 +102,11 @@ void ZipOutputStream::finish() m_rSharedThreadPool.waitUntilEmpty(); for (size_t i = 0; i < m_aEntries.size(); i++) { + //Any exceptions thrown in the threads were caught and stored for now + ::css::uno::Any aCaughtException(m_aEntries[i]->getParallelDeflateException()); + if (aCaughtException.hasValue()) + ::cppu::throwException(aCaughtException); + writeLOC(m_aEntries[i]->getZipEntry(), m_aEntries[i]->isEncrypt()); sal_Int32 nRead; diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx index a0fa26b6e66f..63b438a7a517 100644 --- a/package/source/zippackage/ZipPackageStream.cxx +++ b/package/source/zippackage/ZipPackageStream.cxx @@ -46,6 +46,7 @@ #include <comphelper/processfactory.hxx> #include <comphelper/seekableinput.hxx> #include <comphelper/storagehelper.hxx> +#include <cppuhelper/exc_hlp.hxx> #include <cppuhelper/supportsservice.hxx> #include <cppuhelper/typeprovider.hxx> @@ -471,8 +472,15 @@ public: private: virtual void doWork() SAL_OVERRIDE { - deflateZipEntry(mpEntry, mxInStream); - mxInStream.clear(); + try + { + deflateZipEntry(mpEntry, mxInStream); + mxInStream.clear(); + } + catch (const uno::Exception& rException) + { + mpEntry->setParallelDeflateException(::cppu::getCaughtException()); + } } }; |