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-18 13:00:17 +0100
commitc4b4058b6b3a747b96f72ab44560da11726e4468 (patch)
tree6494b4a6b32f7477e8b817d77f700ab36475918b
parent2279208fa0570ef5fa2d49c14a721b7d59be069d (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 (cherry picked from commit 449e0c9c7378ba32039bd5934c26011d682a8a91)
-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 e92e4953bd56..eb3be3677cf1 100644
--- a/accessibility/inc/accessibility/extended/AccessibleGridControl.hxx
+++ b/accessibility/inc/accessibility/extended/AccessibleGridControl.hxx
@@ -196,7 +196,7 @@ private:
::osl::Mutex m_aMutex;
::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 df7b8a0a7c65..fcd8dbceefdb 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()
{
::osl::MutexGuard aGuard( m_aMutex );
+ 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;
}