From 57574c2bcc60d37620288c403267c34d960f5863 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Wed, 14 Feb 2018 13:21:40 +0100 Subject: 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 Reviewed-by: Stephan Bergmann --- framework/source/helper/statusindicatorfactory.cxx | 3 ++- framework/source/helper/wakeupthread.cxx | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/source/helper/statusindicatorfactory.cxx b/framework/source/helper/statusindicatorfactory.cxx index fc4e04283fdf..1669bfea5068 100644 --- a/framework/source/helper/statusindicatorfactory.cxx +++ b/framework/source/helper/statusindicatorfactory.cxx @@ -18,6 +18,7 @@ */ #include +#include #include #include #include @@ -547,7 +548,7 @@ void StatusIndicatorFactory::impl_stopWakeUpThread() rtl::Reference 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(); } -- cgit