vcl/inc/salusereventlist.hxx | 14 ++++++++++---- vcl/source/app/salusereventlist.cxx | 16 ++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-)
New commits: commit 90523fd368cf249cb00bd1d881a2a19e1510ca85 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Thu May 5 22:22:51 2022 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon May 9 10:18:41 2022 +0200 osl::Mutex->std::mutex in SalUserEventList Change-Id: I463f1620e28bf71b8b7ad61a9da074ff6ee7f0f5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133912 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/vcl/inc/salusereventlist.hxx b/vcl/inc/salusereventlist.hxx index cc5aa88c930c..864802c50a0b 100644 --- a/vcl/inc/salusereventlist.hxx +++ b/vcl/inc/salusereventlist.hxx @@ -22,7 +22,7 @@ #include <sal/config.h> #include <vcl/dllapi.h> -#include <osl/mutex.hxx> +#include <mutex> #include <osl/thread.hxx> #include <list> @@ -57,7 +57,7 @@ public: }; protected: - mutable osl::Mutex m_aUserEventsMutex; + mutable std::mutex m_aUserEventsMutex; std::list< SalUserEvent > m_aUserEvents; std::list< SalUserEvent > m_aProcessingUserEvents; bool m_bAllUserEventProcessedSignaled; @@ -68,6 +68,7 @@ protected: virtual void TriggerUserEventProcessing() = 0; virtual void TriggerAllUserEventsProcessed() {} + inline bool HasUserEvents_NoLock() const; public: SalUserEventList(); virtual ~SalUserEventList() COVERITY_NOEXCEPT_FALSE; @@ -100,13 +101,18 @@ inline bool SalUserEventList::isFrameAlive( const SalFrame* pFrame ) const inline bool SalUserEventList::HasUserEvents() const { - osl::MutexGuard aGuard( m_aUserEventsMutex ); + std::unique_lock aGuard( m_aUserEventsMutex ); + return HasUserEvents_NoLock(); +} + +inline bool SalUserEventList::HasUserEvents_NoLock() const +{ return !(m_aUserEvents.empty() && m_aProcessingUserEvents.empty()); } inline void SalUserEventList::PostEvent( SalFrame* pFrame, void* pData, SalEvent nEvent ) { - osl::MutexGuard aGuard( m_aUserEventsMutex ); + std::unique_lock aGuard( m_aUserEventsMutex ); m_aUserEvents.push_back( SalUserEvent( pFrame, pData, nEvent ) ); m_bAllUserEventProcessedSignaled = false; TriggerUserEventProcessing(); diff --git a/vcl/source/app/salusereventlist.cxx b/vcl/source/app/salusereventlist.cxx index 949467ae218c..1e3f78cc43bf 100644 --- a/vcl/source/app/salusereventlist.cxx +++ b/vcl/source/app/salusereventlist.cxx @@ -62,7 +62,7 @@ bool SalUserEventList::DispatchUserEvents( bool bHandleAllCurrentEvents ) oslThreadIdentifier aCurId = osl::Thread::getCurrentIdentifier(); DBG_TESTSOLARMUTEX(); - osl::ResettableMutexGuard aResettableListGuard(m_aUserEventsMutex); + std::unique_lock aResettableListGuard(m_aUserEventsMutex); if (!m_aUserEvents.empty()) { @@ -80,7 +80,7 @@ bool SalUserEventList::DispatchUserEvents( bool bHandleAllCurrentEvents ) } } - if (HasUserEvents()) + if (HasUserEvents_NoLock()) { bWasEvent = true; m_aProcessingThread = aCurId; @@ -93,13 +93,13 @@ bool SalUserEventList::DispatchUserEvents( bool bHandleAllCurrentEvents ) m_aProcessingUserEvents.pop_front(); // remember to reset the guard before break or continue the loop - aResettableListGuard.clear(); + aResettableListGuard.unlock(); if ( !isFrameAlive( aEvent.m_pFrame ) ) { if ( aEvent.m_nEvent == SalEvent::UserEvent ) delete static_cast< ImplSVEvent* >( aEvent.m_pData ); - aResettableListGuard.reset(); + aResettableListGuard.lock(); continue; } @@ -119,14 +119,14 @@ bool SalUserEventList::DispatchUserEvents( bool bHandleAllCurrentEvents ) auto process = [&aEvent, this] () noexcept { ProcessEvent(aEvent); }; process(); #endif - aResettableListGuard.reset(); + aResettableListGuard.lock(); if (!bHandleAllCurrentEvents) break; } while( true ); } - if ( !m_bAllUserEventProcessedSignaled && !HasUserEvents() ) + if ( !m_bAllUserEventProcessedSignaled && !HasUserEvents_NoLock() ) { m_bAllUserEventProcessedSignaled = true; TriggerAllUserEventsProcessed(); @@ -139,7 +139,7 @@ void SalUserEventList::RemoveEvent( SalFrame* pFrame, void* pData, SalEvent nEve { SalUserEvent aEvent( pFrame, pData, nEvent ); - osl::MutexGuard aGuard( m_aUserEventsMutex ); + std::unique_lock aGuard( m_aUserEventsMutex ); auto it = std::find( m_aUserEvents.begin(), m_aUserEvents.end(), aEvent ); if ( it != m_aUserEvents.end() ) { @@ -154,7 +154,7 @@ void SalUserEventList::RemoveEvent( SalFrame* pFrame, void* pData, SalEvent nEve } } - if ( !m_bAllUserEventProcessedSignaled && !HasUserEvents() ) + if ( !m_bAllUserEventProcessedSignaled && !HasUserEvents_NoLock() ) { m_bAllUserEventProcessedSignaled = true; TriggerAllUserEventsProcessed();