embeddedobj/source/msole/oleembed.cxx | 2 ++ embeddedobj/source/msole/olevisual.cxx | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-)
New commits: commit ec2d9d7d0ebcaf1aa6666301331b934a448f5d39 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Fri Jun 21 10:04:33 2024 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Fri Jun 21 12:31:53 2024 +0500 Make sure to clear the guard around OleEmbeddedObject::changeState The method itself clears its own guard; the caller still holding the guard results in hangs seen in some Java code. See also commit e2bfc34d146806a8f96be0cd2323d716f12cba4e (Reimplement OleComponentNative_Impl to use IGlobalInterfaceTablem 2024-03-11). Change-Id: Ib22e71e7500ccceb946f7b1d6606f8f61ae2afe8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169315 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins diff --git a/embeddedobj/source/msole/oleembed.cxx b/embeddedobj/source/msole/oleembed.cxx index 657d27710ca3..41792fede127 100644 --- a/embeddedobj/source/msole/oleembed.cxx +++ b/embeddedobj/source/msole/oleembed.cxx @@ -910,6 +910,7 @@ void SAL_CALL OleEmbeddedObject::doVerb( sal_Int32 nVerbID ) m_bTriedConversion = true; if ( TryToConvertToOOo( m_xObjectStream ) ) { + aGuard.clear(); changeState( embed::EmbedStates::ACTIVE ); return; } @@ -941,6 +942,7 @@ void SAL_CALL OleEmbeddedObject::doVerb( sal_Int32 nVerbID ) if ( TryToConvertToOOo( xStream ) ) { + aGuard.clear(); changeState( embed::EmbedStates::ACTIVE ); return; } diff --git a/embeddedobj/source/msole/olevisual.cxx b/embeddedobj/source/msole/olevisual.cxx index bcbacffe5d64..b5047d1036b6 100644 --- a/embeddedobj/source/msole/olevisual.cxx +++ b/embeddedobj/source/msole/olevisual.cxx @@ -355,9 +355,6 @@ embed::VisualRepresentation SAL_CALL OleEmbeddedObject::getPreferredVisualRepres { try { - if ( m_nObjectState == embed::EmbedStates::LOADED ) - changeState( embed::EmbedStates::RUNNING ); - datatransfer::DataFlavor aDataFlavor( "application/x-openoffice-wmf;windows_formatname=\"Image WMF\"", "Windows Metafile", @@ -366,6 +363,8 @@ embed::VisualRepresentation SAL_CALL OleEmbeddedObject::getPreferredVisualRepres embed::VisualRepresentation aVisualRepr; { ClearedMutexArea clearedMutex(aGuard); + if ( m_nObjectState == embed::EmbedStates::LOADED ) + changeState( embed::EmbedStates::RUNNING ); aVisualRepr.Data = m_pOleComponent->getTransferData(aDataFlavor); } aVisualRepr.Flavor = aDataFlavor;