On Mon, 2012-03-05 at 12:56 -0800, julien2412 wrote:
> I'm just a C++ beginner (and think i'll still be for years), it's far beyond
> my few skills sorry 

        Hah ! you're doing really well for a beginner :-)

> Now if someone propose a patch I can try to test again the closing of base.

        The attached might work, input / testing appreciated :-) particularly
of the other component's exit, and the results of 'make check' before
and after.

        Thanks,

                Michael.

-- 
michael.me...@suse.com  <><, Pseudo Engineer, itinerant idiot
>From 83b9e1114e829410e4063da27f9c2af220978354 Mon Sep 17 00:00:00 2001
From: Michael Meeks <michael.me...@suse.com>
Date: Mon, 5 Mar 2012 21:18:00 +0000
Subject: [PATCH] attempt fix of hang on base close, due to solarmutex
 deadlock on join

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

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to