[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