From 7b5922eb666e5f153060468b271d99510adb422e Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Fri, 30 Jul 2021 10:10:55 +0200 Subject: osl::Mutex->std::mutex in DispatchHelper Change-Id: I6443f604f7f5cacc4b3d67bb6dab07706c82a9a7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119700 Tested-by: Jenkins Reviewed-by: Noel Grandin --- framework/source/services/dispatchhelper.cxx | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'framework') diff --git a/framework/source/services/dispatchhelper.cxx b/framework/source/services/dispatchhelper.cxx index 380eab11ec67..cfa4a8a2bbe1 100644 --- a/framework/source/services/dispatchhelper.cxx +++ b/framework/source/services/dispatchhelper.cxx @@ -53,6 +53,7 @@ css::uno::Sequence SAL_CALL DispatchHelper::getSupportedServiceNames() */ DispatchHelper::DispatchHelper(const css::uno::Reference& xContext) : m_xContext(xContext) + , m_aBlockFlag(false) { } @@ -91,11 +92,12 @@ css::uno::Any SAL_CALL DispatchHelper::executeDispatch( } // parse given URL + css::uno::Reference xParser; /* SAFE { */ - osl::ClearableMutexGuard aReadLock(m_mutex); - css::uno::Reference xParser - = css::util::URLTransformer::create(m_xContext); - aReadLock.clear(); + { + std::lock_guard aReadLock(m_mutex); + xParser = css::util::URLTransformer::create(m_xContext); + } /* } SAFE */ css::util::URL aURL; @@ -148,16 +150,18 @@ DispatchHelper::executeDispatch(const css::uno::Reference css::uno::UNO_QUERY); /* SAFE { */ { - osl::MutexGuard aWriteLock(m_mutex); + std::lock_guard aWriteLock(m_mutex); m_xBroadcaster = xNotifyDispatch; - m_aBlock.reset(); + m_aBlockFlag = false; } /* } SAFE */ // dispatch it and wait for a notification // TODO/MBA: waiting in main thread?! xNotifyDispatch->dispatchWithNotification(aURL, aArguments, xListener); - m_aBlock.wait(); // wait for result + + std::unique_lock aWriteLock(m_mutex); + m_aBlock.wait(aWriteLock, [this] { return m_aBlockFlag; }); // wait for result } else { @@ -180,9 +184,10 @@ DispatchHelper::executeDispatch(const css::uno::Reference */ void SAL_CALL DispatchHelper::dispatchFinished(const css::frame::DispatchResultEvent& aResult) { - osl::MutexGuard g(m_mutex); + std::lock_guard g(m_mutex); m_aResult <<= aResult; - m_aBlock.set(); + m_aBlockFlag = true; + m_aBlock.notify_one(); m_xBroadcaster.clear(); } @@ -193,9 +198,10 @@ void SAL_CALL DispatchHelper::dispatchFinished(const css::frame::DispatchResultE */ void SAL_CALL DispatchHelper::disposing(const css::lang::EventObject&) { - osl::MutexGuard g(m_mutex); + std::lock_guard g(m_mutex); m_aResult.clear(); - m_aBlock.set(); + m_aBlockFlag = true; + m_aBlock.notify_one(); m_xBroadcaster.clear(); } } -- cgit