tdf#146007: make sure to not hold solar mutex

COM might need to forward the call to another thread (with corresponding
apartment); if that thread happens to wait for solar mutex, COM call may
deadlock.

Change-Id: I8fcf04619cd29b678fd7ade87254b9aad2f639a3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133853
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
Mike Kaganski
2022-05-05 11:57:56 +02:00
parent 7c5d3d74ee
commit b8bb44161a
@@ -37,6 +37,7 @@
#include <rtl/process.h>
#include <o3tl/char16_t2wchar_t.hxx>
#include <o3tl/string_view.hxx>
#include <vcl/svapp.hxx>
#include "WinImplHelper.hxx"
#include <shlguid.h>
@@ -962,6 +963,10 @@ void VistaFilePickerImpl::impl_sta_ShowDialogModal(Request& rRequest)
HRESULT hResult = E_FAIL;
try
{
// tdf#146007: Make sure we don't hold solar mutex: COM may need to forward
// the execution to the main thread, and holding solar mutex could deadlock
SolarMutexGuard g; // First acquire, to avoid releaser failure
SolarMutexReleaser r;
// show dialog and wait for user decision
hResult = iDialog->Show(m_hParentWindow ? m_hParentWindow
: choose_parent_window()); // parent window needed