diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2018-02-14 13:21:40 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2018-02-15 21:47:01 +0100 |
commit | 831c4f1874f01bcd7282cdf08b1446acc5c4760e (patch) | |
tree | 7ae4983464fe04d4f07c1b11f5da5995136c4453 /framework | |
parent | 0963c34dd38bec8c1105c20edecee831ca88fe2d (diff) |
tdf#108005: Problems with progress bar while saving document
...as StatusIndicatorFactory::m_pWakeUp is still non-null after it has already
been used while loading the document. Regression introduced with
017f250764ec7b4ecb82ac19f5b3f68cadf1bf56 "Ensure WakeUpThread is joined before
exit".
(Also, WakeUpThread::stop could take up to 25 msec longer than necessary, as it
failed to set condition_, so would always have waited for WakeUpThread::execute
to finish its next 25 msec condition_.wait call.)
Change-Id: Ic7fe15f1b90f3b8292cd2ceccdc2719a00743d44
Reviewed-on: https://gerrit.libreoffice.org/49718
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit 57574c2bcc60d37620288c403267c34d960f5863)
Reviewed-on: https://gerrit.libreoffice.org/49781
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'framework')
-rw-r--r-- | framework/source/helper/statusindicatorfactory.cxx | 3 | ||||
-rw-r--r-- | framework/source/helper/wakeupthread.cxx | 1 |
2 files changed, 3 insertions, 1 deletions
diff --git a/framework/source/helper/statusindicatorfactory.cxx b/framework/source/helper/statusindicatorfactory.cxx index 577cabf82ac3..649145d95833 100644 --- a/framework/source/helper/statusindicatorfactory.cxx +++ b/framework/source/helper/statusindicatorfactory.cxx @@ -18,6 +18,7 @@ */ #include <algorithm> +#include <utility> #include <helper/statusindicatorfactory.hxx> #include <helper/statusindicator.hxx> #include <helper/vclstatusindicator.hxx> @@ -547,7 +548,7 @@ void StatusIndicatorFactory::impl_stopWakeUpThread() rtl::Reference<WakeUpThread> wakeUp; { osl::MutexGuard g(m_mutex); - wakeUp = m_pWakeUp; + std::swap(wakeUp, m_pWakeUp); } if (wakeUp.is()) { diff --git a/framework/source/helper/wakeupthread.cxx b/framework/source/helper/wakeupthread.cxx index b13621225d21..503f6707a010 100644 --- a/framework/source/helper/wakeupthread.cxx +++ b/framework/source/helper/wakeupthread.cxx @@ -53,6 +53,7 @@ void framework::WakeUpThread::stop() { osl::MutexGuard g(mutex_); terminate_ = true; } + condition_.set(); join(); } |