summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-06-16 16:52:55 +0100
committerCaolán McNamara <caolanm@redhat.com>2016-06-16 17:09:55 +0100
commite841ed93d6c6d817be1f7fdc18ff971325c861cc (patch)
treec775549661ead5de870b11912a94500adab1a4b1
parentee24e7f2b689bf0f63ba618fc7ee7ac6bc644172 (diff)
Resolves: tdf#82532 parent mutex dtored before child dtor uses it
Mutex belonged to DisposeListenerGridBridge which inherits from FmXDisposeListener, FmXDisposeListener dtor accesses a reference to the parent mutex in its dtor, but the mutex has been destroyed at this point. Move the mutex from parent to child. FWIW these classes are on the candidate list to merge. Change-Id: Ic639eaed97c2b0625c368ed249f09920af37f94e
-rw-r--r--include/svx/fmtools.hxx3
-rw-r--r--svx/source/fmcomp/gridctrl.cxx3
-rw-r--r--svx/source/form/fmtools.cxx7
3 files changed, 3 insertions, 10 deletions
diff --git a/include/svx/fmtools.hxx b/include/svx/fmtools.hxx
index e122243d4ac2..34dec03da81e 100644
--- a/include/svx/fmtools.hxx
+++ b/include/svx/fmtools.hxx
@@ -158,10 +158,9 @@ class SAL_WARN_UNUSED FmXDisposeListener
friend class FmXDisposeMultiplexer;
rtl::Reference<FmXDisposeMultiplexer> m_pAdapter;
- ::osl::Mutex& m_rMutex;
+ osl::Mutex m_aMutex;
public:
- FmXDisposeListener(::osl::Mutex& _rMutex) : m_rMutex(_rMutex) { }
virtual ~FmXDisposeListener();
virtual void disposing(const css::lang::EventObject& _rEvent, sal_Int16 _nId) throw( css::uno::RuntimeException ) = 0;
diff --git a/svx/source/fmcomp/gridctrl.cxx b/svx/source/fmcomp/gridctrl.cxx
index a6043a6a91c6..cb6b42a07a3a 100644
--- a/svx/source/fmcomp/gridctrl.cxx
+++ b/svx/source/fmcomp/gridctrl.cxx
@@ -192,7 +192,6 @@ void GridFieldValueListener::dispose()
class DisposeListenerGridBridge : public FmXDisposeListener
{
- osl::Mutex m_aMutex;
DbGridControl& m_rParent;
rtl::Reference<FmXDisposeMultiplexer> m_xRealListener;
@@ -204,7 +203,7 @@ public:
};
DisposeListenerGridBridge::DisposeListenerGridBridge(DbGridControl& _rParent, const Reference< XComponent >& _rxObject)
- :FmXDisposeListener(m_aMutex)
+ :FmXDisposeListener()
,m_rParent(_rParent)
{
diff --git a/svx/source/form/fmtools.cxx b/svx/source/form/fmtools.cxx
index 4eb8d38fc2c7..6b1301b5e742 100644
--- a/svx/source/form/fmtools.cxx
+++ b/svx/source/form/fmtools.cxx
@@ -259,7 +259,6 @@ void CursorWrapper::ImplConstruct(const Reference< css::sdbc::XResultSet>& _rxCu
m_xGeneric = m_xMoveOperations.get();
}
-
CursorWrapper& CursorWrapper::operator=(const Reference< css::sdbc::XRowSet>& _rxCursor)
{
m_xMoveOperations.set(_rxCursor, UNO_QUERY);
@@ -274,20 +273,17 @@ CursorWrapper& CursorWrapper::operator=(const Reference< css::sdbc::XRowSet>& _r
return *this;
}
-
FmXDisposeListener::~FmXDisposeListener()
{
setAdapter(nullptr);
}
-
void FmXDisposeListener::setAdapter(FmXDisposeMultiplexer* pAdapter)
{
- ::osl::MutexGuard aGuard(m_rMutex);
+ ::osl::MutexGuard aGuard(m_aMutex);
m_pAdapter = pAdapter;
}
-
FmXDisposeMultiplexer::FmXDisposeMultiplexer(FmXDisposeListener* _pListener, const Reference< css::lang::XComponent>& _rxObject)
:m_xObject(_rxObject)
,m_pListener(_pListener)
@@ -299,7 +295,6 @@ FmXDisposeMultiplexer::FmXDisposeMultiplexer(FmXDisposeListener* _pListener, con
m_xObject->addEventListener(this);
}
-
FmXDisposeMultiplexer::~FmXDisposeMultiplexer()
{
}