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 695986f7a61fd24b8c5fbb8c3afe0786293c72ed
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 10:21:09 2024 +0500

    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 63d5f700b089..b946fed792c8 100644
--- a/embeddedobj/source/msole/oleembed.cxx
+++ b/embeddedobj/source/msole/oleembed.cxx
@@ -601,7 +601,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
 
@@ -620,7 +620,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 )
 {

Reply via email to