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:12:11 +0100
commit1c0d1199fe02666de0d162f071ce7e6e812a23df (patch)
tree8ef1f918cb1fda9f4302999ca69cf6edc1b8e3cd
parentfe4dbade94c1170da402348aa8ade9885c5f4e3f (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. (cherry picked from commit e841ed93d6c6d817be1f7fdc18ff971325c861cc) Change-Id: Ic639eaed97c2b0625c368ed249f09920af37f94e
-rw-r--r--include/svx/fmtools.hxx4
-rw-r--r--svx/source/fmcomp/gridctrl.cxx3
-rw-r--r--svx/source/form/fmtools.cxx9
3 files changed, 5 insertions, 11 deletions
diff --git a/include/svx/fmtools.hxx b/include/svx/fmtools.hxx
index e029b9913cda..99ff0577e0da 100644
--- a/include/svx/fmtools.hxx
+++ b/include/svx/fmtools.hxx
@@ -158,10 +158,10 @@ class SAL_WARN_UNUSED FmXDisposeListener
friend class FmXDisposeMultiplexer;
FmXDisposeMultiplexer* m_pAdapter;
- ::osl::Mutex& m_rMutex;
+ osl::Mutex m_aMutex;
public:
- FmXDisposeListener(::osl::Mutex& _rMutex) : m_pAdapter(nullptr), m_rMutex(_rMutex) { }
+ FmXDisposeListener() : m_pAdapter(nullptr) { }
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 8effd55325b8..46ff64532d42 100644
--- a/svx/source/fmcomp/gridctrl.cxx
+++ b/svx/source/fmcomp/gridctrl.cxx
@@ -195,7 +195,6 @@ void GridFieldValueListener::dispose()
class DisposeListenerGridBridge : public FmXDisposeListener
{
- osl::Mutex m_aMutex;
DbGridControl& m_rParent;
FmXDisposeMultiplexer* m_pRealListener;
@@ -207,7 +206,7 @@ public:
};
DisposeListenerGridBridge::DisposeListenerGridBridge(DbGridControl& _rParent, const Reference< XComponent >& _rxObject)
- :FmXDisposeListener(m_aMutex)
+ :FmXDisposeListener()
,m_rParent(_rParent)
,m_pRealListener(nullptr)
{
diff --git a/svx/source/form/fmtools.cxx b/svx/source/form/fmtools.cxx
index bfd316e5a94e..beec4aaf201e 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,31 +273,28 @@ CursorWrapper& CursorWrapper::operator=(const Reference< css::sdbc::XRowSet>& _r
return *this;
}
-
FmXDisposeListener::~FmXDisposeListener()
{
setAdapter(nullptr);
}
-
void FmXDisposeListener::setAdapter(FmXDisposeMultiplexer* pAdapter)
{
if (m_pAdapter)
{
- ::osl::MutexGuard aGuard(m_rMutex);
+ ::osl::MutexGuard aGuard(m_aMutex);
m_pAdapter->release();
m_pAdapter = nullptr;
}
if (pAdapter)
{
- ::osl::MutexGuard aGuard(m_rMutex);
+ ::osl::MutexGuard aGuard(m_aMutex);
m_pAdapter = pAdapter;
m_pAdapter->acquire();
}
}
-
FmXDisposeMultiplexer::FmXDisposeMultiplexer(FmXDisposeListener* _pListener, const Reference< css::lang::XComponent>& _rxObject)
:m_xObject(_rxObject)
,m_pListener(_pListener)
@@ -310,7 +306,6 @@ FmXDisposeMultiplexer::FmXDisposeMultiplexer(FmXDisposeListener* _pListener, con
m_xObject->addEventListener(this);
}
-
FmXDisposeMultiplexer::~FmXDisposeMultiplexer()
{
}