summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-12-16 16:09:19 +0100
committerMichael Stahl <mstahl@redhat.com>2013-12-16 16:21:09 +0100
commit449e0c9c7378ba32039bd5934c26011d682a8a91 (patch)
tree830cbbdb68f11b520bb5187d2c2c4fc528ba080e
parent9eccfd86eea1603bdca9f31f3984dcf464406bbc (diff)
accessibility: don't crash if the TableControl is dead
AccessibleGridControlAccess: clear the m_pTable member in dispose() so it is no longer accessed later. Change-Id: I490c84ce1bee55c9c69eb29b81ddfbe808301797
-rw-r--r--accessibility/inc/accessibility/extended/AccessibleGridControl.hxx2
-rw-r--r--accessibility/source/extended/AccessibleGridControl.cxx15
2 files changed, 10 insertions, 7 deletions
diff --git a/accessibility/inc/accessibility/extended/AccessibleGridControl.hxx b/accessibility/inc/accessibility/extended/AccessibleGridControl.hxx
index c4ed353c28f6..3752fccf3eba 100644
--- a/accessibility/inc/accessibility/extended/AccessibleGridControl.hxx
+++ b/accessibility/inc/accessibility/extended/AccessibleGridControl.hxx
@@ -195,7 +195,7 @@ class AccessibleGridControlAccess :public AccessibleGridControlAccess_Base
private:
::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
m_xParent;
- ::svt::table::IAccessibleTable& m_rTable;
+ ::svt::table::IAccessibleTable * m_pTable;
::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >
m_xContext;
diff --git a/accessibility/source/extended/AccessibleGridControl.cxx b/accessibility/source/extended/AccessibleGridControl.cxx
index 8ce58001b046..c56f6bd3e85e 100644
--- a/accessibility/source/extended/AccessibleGridControl.cxx
+++ b/accessibility/source/extended/AccessibleGridControl.cxx
@@ -407,10 +407,11 @@ void AccessibleGridControl::commitTableEvent(sal_Int16 _nEventId,const Any& _rNe
// ============================================================================
// -----------------------------------------------------------------------------
-AccessibleGridControlAccess::AccessibleGridControlAccess( const Reference< XAccessible >& _rxParent, IAccessibleTable& _rTable )
- :m_xParent( _rxParent )
- ,m_rTable( _rTable )
- ,m_pContext( NULL )
+AccessibleGridControlAccess::AccessibleGridControlAccess(
+ const Reference< XAccessible >& rxParent, IAccessibleTable& rTable )
+ : m_xParent( rxParent )
+ , m_pTable( & rTable )
+ , m_pContext( 0 )
{
}
@@ -424,6 +425,7 @@ void AccessibleGridControlAccess::dispose()
{
SolarMutexGuard g;
+ m_pTable = 0;
m_pContext = NULL;
::comphelper::disposeComponent( m_xContext );
}
@@ -441,8 +443,9 @@ Reference< XAccessibleContext > SAL_CALL AccessibleGridControlAccess::getAccessi
if ( m_pContext && !m_pContext->isAlive() )
m_xContext = m_pContext = NULL;
- if ( !m_xContext.is() )
- m_xContext = m_pContext = new AccessibleGridControl( m_xParent, this, m_rTable );
+ if (!m_xContext.is() && m_pTable)
+ m_xContext = m_pContext =
+ new AccessibleGridControl(m_xParent, this, *m_pTable);
return m_xContext;
}