[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - fpicker/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Jan 29 10:03:05 UTC 2019


 fpicker/source/win32/filepicker/asyncrequests.cxx |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

New commits:
commit 5070fa647ed09c16d49b3a1a1a7d1cdc8035af2e
Author:     Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Fri Jan 25 10:05:36 2019 +0000
Commit:     Michael Stahl <Michael.Stahl at cib.de>
CommitDate: Tue Jan 29 11:02:44 2019 +0100

    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 at fbihome.de>
    (cherry picked from commit 5b2f1243bd44b450da26c8344b3ee459f8e88f6c)
    Reviewed-on: https://gerrit.libreoffice.org/66913
    Reviewed-by: Xisco FaulĂ­ <xiscofauli at libreoffice.org>
    (cherry picked from commit 1ed8416703d1f1a33690cc47fd6cb6b2b3520cf1)
    
    Change-Id: I0c56b89a11f96be54e82b756c5e18a058b04a41d
    Reviewed-on: https://gerrit.libreoffice.org/66979
    Reviewed-by: Michael Stahl <Michael.Stahl at cib.de>
    Tested-by: Michael Stahl <Michael.Stahl at cib.de>

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()


More information about the Libreoffice-commits mailing list