embeddedobj/source/inc/oleembobj.hxx | 11 +++++++++++ embeddedobj/source/msole/oleembed.cxx | 5 +++-- embeddedobj/source/msole/olepersist.cxx | 11 ----------- 3 files changed, 14 insertions(+), 13 deletions(-)
New commits: commit 0c9f650136277b708912a86a6867ec91c8b384a5 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Mon Mar 18 22:14:31 2024 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Tue Mar 19 06:20:41 2024 +0100 Release the mutex when calling the OLE method ... which may need to be executed on a different thread. Change-Id: Id9e4b86fd3eafa49139b21e3817aa1ee8aff3dba Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164986 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/embeddedobj/source/inc/oleembobj.hxx b/embeddedobj/source/inc/oleembobj.hxx index cf7c5ebe4ab4..983f242308cf 100644 --- a/embeddedobj/source/inc/oleembobj.hxx +++ b/embeddedobj/source/inc/oleembobj.hxx @@ -468,4 +468,15 @@ private: osl::ResettableMutexGuard& m_guard; }; +namespace +{ +#if defined(_WIN32) +template <class Proc> auto ExecUnlocked(Proc proc, osl::ResettableMutexGuard& guard) +{ + ClearedMutexArea area(guard); + return proc(); +} +#endif +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embeddedobj/source/msole/oleembed.cxx b/embeddedobj/source/msole/oleembed.cxx index bd424e4c0afb..821cbae9b1c4 100644 --- a/embeddedobj/source/msole/oleembed.cxx +++ b/embeddedobj/source/msole/oleembed.cxx @@ -604,7 +604,7 @@ uno::Sequence< sal_Int32 > SAL_CALL OleEmbeddedObject::getReachableStates() } // end wrapping related part ==================== - ::osl::MutexGuard aGuard( m_aMutex ); + ::osl::ResettableMutexGuard aGuard( m_aMutex ); if ( m_bDisposed ) throw lang::DisposedException(); // TODO @@ -623,7 +623,8 @@ uno::Sequence< sal_Int32 > SAL_CALL OleEmbeddedObject::getReachableStates() // the list of states can only be guessed based on standard verbs, // since there is no way to detect what additional verbs do - return GetReachableStatesList_Impl( m_pOleComponent->GetVerbList() ); + return GetReachableStatesList_Impl( + ExecUnlocked([this] { return m_pOleComponent->GetVerbList(); }, aGuard)); } else #endif diff --git a/embeddedobj/source/msole/olepersist.cxx b/embeddedobj/source/msole/olepersist.cxx index 381fc7b0d68c..e6af72fedccf 100644 --- a/embeddedobj/source/msole/olepersist.cxx +++ b/embeddedobj/source/msole/olepersist.cxx @@ -58,17 +58,6 @@ using namespace ::com::sun::star; using namespace ::comphelper; -namespace -{ -#if defined(_WIN32) -template <class Proc> auto ExecUnlocked(Proc proc, osl::ResettableMutexGuard& guard) -{ - ClearedMutexArea area(guard); - return proc(); -} -#endif -} - bool KillFile_Impl( const OUString& aURL, const uno::Reference< uno::XComponentContext >& xContext ) {