summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2016-04-14 11:19:05 +0200
committerStephan Bergmann <sbergman@redhat.com>2016-04-14 11:19:20 +0200
commiteec11a3064e40c810971350223a6b42cc150bc4c (patch)
treec4811b34a3fcd4b725575e1ae20a9622a763f8a6 /framework
parentdd1509b1f35b69d4c7707f7e4b05f86734c775af (diff)
Race between Frame::dispose and timer-triggered LayoutManager::AsyncLayouHdl
Change-Id: I8e9ca61c2a8334697b7a0adef7a2fc20f503f299
Diffstat (limited to 'framework')
-rw-r--r--framework/source/layoutmanager/layoutmanager.cxx14
1 files changed, 13 insertions, 1 deletions
diff --git a/framework/source/layoutmanager/layoutmanager.cxx b/framework/source/layoutmanager/layoutmanager.cxx
index 4eff39e2efdc..f2c598a9efc2 100644
--- a/framework/source/layoutmanager/layoutmanager.cxx
+++ b/framework/source/layoutmanager/layoutmanager.cxx
@@ -2328,7 +2328,19 @@ bool LayoutManager::implts_doLayout( bool bForceRequestBorderSpace, bool bOuterR
awt::Rectangle aCurrBorderSpace( m_aDockingArea );
Reference< awt::XWindow > xContainerWindow( m_xContainerWindow );
Reference< awt::XTopWindow2 > xContainerTopWindow( m_xContainerTopWindow );
- Reference< awt::XWindow > xComponentWindow( m_xFrame->getComponentWindow() );
+ Reference< awt::XWindow > xComponentWindow;
+ try {
+ xComponentWindow = m_xFrame->getComponentWindow();
+ } catch (css::lang::DisposedException &) {
+ // There can be a race between one thread calling Frame::dispose
+ // (framework/source/services/frame.cxx) -> Frame::disableLayoutManager
+ // -> LayoutManager::attachFrame(null) setting m_xFrame to null, and
+ // the main thread firing the timer-triggered
+ // LayoutManager::AsyncLayoutHdl -> LayoutManager::implts_doLayout and
+ // calling into the in-dispose m_xFrame here, so silently ignore a
+ // DisposedException here:
+ return false;
+ }
Reference< XDockingAreaAcceptor > xDockingAreaAcceptor( m_xDockingAreaAcceptor );
aReadLock.clear();
/* SAFE AREA ----------------------------------------------------------------------------------------------- */