[Libreoffice-commits] core.git: Branch 'libreoffice-5-2' - include/svx svx/source

Caolán McNamara caolanm at redhat.com
Thu Jun 16 16:16:39 UTC 2016


 include/svx/fmtools.hxx        |    4 ++--
 svx/source/fmcomp/gridctrl.cxx |    3 +--
 svx/source/form/fmtools.cxx    |    9 ++-------
 3 files changed, 5 insertions(+), 11 deletions(-)

New commits:
commit 1c0d1199fe02666de0d162f071ce7e6e812a23df
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jun 16 16:52:55 2016 +0100

    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

diff --git a/include/svx/fmtools.hxx b/include/svx/fmtools.hxx
index e029b99..99ff057 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 8effd55..46ff645 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 bfd316e..beec4aa 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()
 {
 }


More information about the Libreoffice-commits mailing list