diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2016-04-14 11:19:05 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-04-14 11:19:20 +0200 |
commit | eec11a3064e40c810971350223a6b42cc150bc4c (patch) | |
tree | c4811b34a3fcd4b725575e1ae20a9622a763f8a6 | |
parent | dd1509b1f35b69d4c7707f7e4b05f86734c775af (diff) |
Race between Frame::dispose and timer-triggered LayoutManager::AsyncLayouHdl
Change-Id: I8e9ca61c2a8334697b7a0adef7a2fc20f503f299
-rw-r--r-- | framework/source/layoutmanager/layoutmanager.cxx | 14 |
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 ----------------------------------------------------------------------------------------------- */ |