[PATCH] attempt fix of hang on base close, due to solarmutex deadlock on join

Michael Meeks michael.meeks at suse.com
Mon Mar 5 13:18:00 PST 2012


---
 framework/inc/dispatch/closedispatcher.hxx    |    1 +
 framework/source/dispatch/closedispatcher.cxx |   11 +++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/framework/inc/dispatch/closedispatcher.hxx b/framework/inc/dispatch/closedispatcher.hxx
index 81d8842..eabad8c 100644
--- a/framework/inc/dispatch/closedispatcher.hxx
+++ b/framework/inc/dispatch/closedispatcher.hxx
@@ -206,6 +206,7 @@ class CloseDispatcher : public css::lang::XTypeProvider
                     during they call us ...
         */
         DECL_LINK( impl_asyncCallback, void* );
+        void doClose();
 
         //---------------------------------------
         /** @short  prepare m_xCloseFrame so it should be closeable without problems.
diff --git a/framework/source/dispatch/closedispatcher.cxx b/framework/source/dispatch/closedispatcher.cxx
index 01523d2..0b670eb 100644
--- a/framework/source/dispatch/closedispatcher.cxx
+++ b/framework/source/dispatch/closedispatcher.cxx
@@ -268,6 +268,13 @@ void SAL_CALL CloseDispatcher::dispatchWithNotification(const css::util::URL&
 */
 IMPL_LINK_NOARG(CloseDispatcher, impl_asyncCallback)
 {
+    SolarMutexReleaser aReleaser;
+    doClose();
+    return 0;
+}
+
+void CloseDispatcher::doClose()
+{
     try
     {
 
@@ -296,7 +303,7 @@ IMPL_LINK_NOARG(CloseDispatcher, impl_asyncCallback)
     // frame already dead ?!
     // Nothing to do !
     if (! xCloseFrame.is())
-        return 0;
+        return;
 
     sal_Bool bCloseFrame           = sal_False;
     sal_Bool bEstablishBackingMode = sal_False;
@@ -452,7 +459,7 @@ IMPL_LINK_NOARG(CloseDispatcher, impl_asyncCallback)
     {
     }
 
-    return 0;
+    return;
 }
 
 //-----------------------------------------------
-- 
1.7.9


--=-E7Huxhjz/Cpb9ckhDc8s--



More information about the LibreOffice mailing list