summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2019-01-25 10:05:36 +0000
committerCaolán McNamara <caolanm@redhat.com>2019-01-29 13:52:00 +0100
commit3640f39432d0dae45321699703b75c38df4f0c28 (patch)
tree67fe1a9445465efcc41e06d7cb9011301a73a7ea
parentbc549a6bf496bb1c787979538cea53fce317424a (diff)
tdf#122927 prevent SolarMutex deadlock on join()
The AsyncRequests thread can be blocked in a SolarMutexGuard, so we have to release the mutex before calling join(). But there is also a static AsyncRequests object inside the VistaFilePickerEventHandler::impl_sendEvent function, which will just be cleaned up at DLL atexit. "Luckily" it won't ever run, so it doesn't need to be joined and we can use isRunning to detect it, prevent releasing a non- existing SolarMutex at this point and so won't crash LO on exit. Reviewed-on: https://gerrit.libreoffice.org/66901 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de> (cherry picked from commit 5b2f1243bd44b450da26c8344b3ee459f8e88f6c) Reviewed-on: https://gerrit.libreoffice.org/66913 Reviewed-by: Xisco Faulí <xiscofauli@libreoffice.org> (cherry picked from commit 1ed8416703d1f1a33690cc47fd6cb6b2b3520cf1) Change-Id: I0c56b89a11f96be54e82b756c5e18a058b04a41d Reviewed-on: https://gerrit.libreoffice.org/67010 Reviewed-by: Michael Stahl <Michael.Stahl@cib.de> Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--fpicker/source/win32/filepicker/asyncrequests.cxx9
1 files changed, 8 insertions, 1 deletions
diff --git a/fpicker/source/win32/filepicker/asyncrequests.cxx b/fpicker/source/win32/filepicker/asyncrequests.cxx
index 766a2309d991..c7fb3f73878e 100644
--- a/fpicker/source/win32/filepicker/asyncrequests.cxx
+++ b/fpicker/source/win32/filepicker/asyncrequests.cxx
@@ -75,7 +75,14 @@ AsyncRequests::~AsyncRequests()
aLock.clear();
// <- SYNCHRONIZED
- join();
+ // The static AsyncRequests aNotify in VistaFilePickerEventHandler::impl_sendEvent
+ // is destructed at DLL atexit. But it won't run, so needs no join and release of
+ // the already destructed SolarMutex, which would crash LO on exit.
+ if (isRunning())
+ {
+ SolarMutexReleaser aReleaser;
+ join();
+ }
}
void AsyncRequests::triggerJobExecution()