From 89853de3231e92a17a646acb7f99584220fadad8 Mon Sep 17 00:00:00 2001 From: tagezi Date: Wed, 6 Dec 2017 21:23:37 +0200 Subject: tdf#104650 Creating guard to reset status indicator Change-Id: Ic1e79badedc031a588c0b07958002ad7c558ba82 Reviewed-on: https://gerrit.libreoffice.org/45987 Tested-by: Jenkins Reviewed-by: Mike Kaganski (cherry picked from commit 58e4b36ace484f2743a3b9919d830c175464b05d) Reviewed-on: https://gerrit.libreoffice.org/46006 --- writerfilter/source/ooxml/OOXMLDocumentImpl.cxx | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'writerfilter') diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx index 44552eee5e5f..b905d8968a15 100644 --- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx +++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx @@ -417,8 +417,30 @@ void OOXMLDocumentImpl::resolveFooter(Stream & rStream, } } +namespace { +// Ensures that the indicator is reset after exiting OOXMLDocumentImpl::resolve +class StatusIndicatorGuard{ +public: + explicit StatusIndicatorGuard(css::uno::Reference& xStatusIndicator) + :mxStatusIndicator(xStatusIndicator) + { + } + + ~StatusIndicatorGuard() + { + if (mxStatusIndicator.is()) + mxStatusIndicator->end(); + } + +private: + css::uno::Reference mxStatusIndicator; +}; +} + void OOXMLDocumentImpl::resolve(Stream & rStream) { + StatusIndicatorGuard aStatusIndicatorGuard(mxStatusIndicator); + if (utl::MediaDescriptor(maMediaDescriptor).getUnpackedValueOrDefault("ReadGlossaries", false)) { resolveFastSubStream(rStream, OOXMLStream::GLOSSARY); @@ -515,9 +537,6 @@ void OOXMLDocumentImpl::resolve(Stream & rStream) "OOXMLDocumentImpl::resolve(): non-UNO exception"); } } - - if (mxStatusIndicator.is()) - mxStatusIndicator->end(); } void OOXMLDocumentImpl::incrementProgress() -- cgit