dbaccess/source/core/dataaccess/ComponentDefinition.cxx | 16 +++++++++------- dbaccess/source/core/dataaccess/ComponentDefinition.hxx | 3 ++- dbaccess/source/ui/misc/singledoccontroller.cxx | 12 +++++++----- 3 files changed, 18 insertions(+), 13 deletions(-)
New commits: commit 7d582d1f9767c0ebd5e319f2fd11711e60cd72fa Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Wed May 29 14:42:06 2019 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri May 31 13:22:58 2019 +0200 dbaccess: fix more memory leaks caused by circular Reference Followup to 96ae2a3300811897c24cccb20f8c2faf382483df; more overridden acquire() creating cycles in dbaccess. (regression from 2660d24a07866e083c5135ea263030f3e3a2e729) Change-Id: I134343b3afbcd5ee3f71212ec18e551455eaee5b Reviewed-on: https://gerrit.libreoffice.org/73158 Reviewed-by: Michael Stahl <michael.st...@cib.de> Tested-by: Michael Stahl <michael.st...@cib.de> diff --git a/dbaccess/source/core/dataaccess/ComponentDefinition.cxx b/dbaccess/source/core/dataaccess/ComponentDefinition.cxx index 41de9c5f995c..1d0d30e88542 100644 --- a/dbaccess/source/core/dataaccess/ComponentDefinition.cxx +++ b/dbaccess/source/core/dataaccess/ComponentDefinition.cxx @@ -157,9 +157,10 @@ Sequence< OUString > SAL_CALL OComponentDefinition::getSupportedServiceNames() void SAL_CALL OComponentDefinition::disposing() { OContentHelper::disposing(); - if ( m_xColumns.is() ) - m_xColumns->disposing(); - m_xColumns.clear(); + if (m_pColumns) + { + m_pColumns->disposing(); + } m_xColumnPropertyListener->clear(); m_xColumnPropertyListener.clear(); } @@ -194,7 +195,7 @@ Reference< XNameAccess> OComponentDefinition::getColumns() ::osl::MutexGuard aGuard(m_aMutex); ::connectivity::checkDisposed(OContentHelper::rBHelper.bDisposed); - if ( !m_xColumns.is() ) + if (!m_pColumns) { std::vector< OUString> aNames; @@ -204,10 +205,11 @@ Reference< XNameAccess> OComponentDefinition::getColumns() for (auto const& definition : rDefinition) aNames.push_back(definition.first); - m_xColumns = new OColumns( *this, m_aMutex, true, aNames, this, nullptr, true, false, false ); - m_xColumns->setParent( *this ); + m_pColumns.reset(new OColumns(*this, m_aMutex, true, aNames, this, nullptr, true, false, false)); + m_pColumns->setParent(*this); } - return m_xColumns.get(); + // see OCollection::acquire + return m_pColumns.get(); } OColumn* OComponentDefinition::createColumn(const OUString& _rName) const diff --git a/dbaccess/source/core/dataaccess/ComponentDefinition.hxx b/dbaccess/source/core/dataaccess/ComponentDefinition.hxx index d43ae556ec17..e71b5fe535a9 100644 --- a/dbaccess/source/core/dataaccess/ComponentDefinition.hxx +++ b/dbaccess/source/core/dataaccess/ComponentDefinition.hxx @@ -84,7 +84,8 @@ class OComponentDefinition :public OContentHelper ,public OComponentDefinition_BASE ,public ::comphelper::OPropertyArrayUsageHelper< OComponentDefinition > { - rtl::Reference< OColumns > m_xColumns; + // no Reference! see OCollection::acquire + std::unique_ptr<OColumns> m_pColumns; rtl::Reference<OColumnPropertyListener> m_xColumnPropertyListener; bool m_bTable; diff --git a/dbaccess/source/ui/misc/singledoccontroller.cxx b/dbaccess/source/ui/misc/singledoccontroller.cxx index ca4ae4253f25..87b1ca9b2447 100644 --- a/dbaccess/source/ui/misc/singledoccontroller.cxx +++ b/dbaccess/source/ui/misc/singledoccontroller.cxx @@ -39,10 +39,11 @@ namespace dbaui // OSingleDocumentController_Data struct OSingleDocumentController_Data { - rtl::Reference< UndoManager > m_xUndoManager; + // no Reference! see UndoManager::acquire + std::unique_ptr<UndoManager> m_pUndoManager; OSingleDocumentController_Data( ::cppu::OWeakObject& i_parent, ::osl::Mutex& i_mutex ) - :m_xUndoManager( new UndoManager( i_parent, i_mutex ) ) + : m_pUndoManager(new UndoManager(i_parent, i_mutex)) { } }; @@ -62,7 +63,7 @@ namespace dbaui { OSingleDocumentController_Base::disposing(); ClearUndoManager(); - m_pData->m_xUndoManager->disposing(); + m_pData->m_pUndoManager->disposing(); } void OSingleDocumentController::ClearUndoManager() @@ -72,7 +73,7 @@ namespace dbaui SfxUndoManager& OSingleDocumentController::GetUndoManager() const { - return m_pData->m_xUndoManager->GetSfxUndoManager(); + return m_pData->m_pUndoManager->GetSfxUndoManager(); } void OSingleDocumentController::addUndoActionAndInvalidate(std::unique_ptr<SfxUndoAction> _pAction) @@ -90,7 +91,8 @@ namespace dbaui Reference< XUndoManager > SAL_CALL OSingleDocumentController::getUndoManager( ) { - return m_pData->m_xUndoManager.get(); + // see UndoManager::acquire + return m_pData->m_pUndoManager.get(); } FeatureState OSingleDocumentController::GetState(sal_uInt16 _nId) const _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits