diff options
author | Michael Stahl <Michael.Stahl@cib.de> | 2019-05-29 14:42:06 +0200 |
---|---|---|
committer | Michael Stahl <Michael.Stahl@cib.de> | 2019-05-31 13:22:58 +0200 |
commit | 7d582d1f9767c0ebd5e319f2fd11711e60cd72fa (patch) | |
tree | 21e6c464719bf2f90e153d06214e932a132cc968 /dbaccess/source/core | |
parent | 6f613f973dcb86dbebc212bc466fbaa2b002655b (diff) |
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.Stahl@cib.de>
Tested-by: Michael Stahl <Michael.Stahl@cib.de>
Diffstat (limited to 'dbaccess/source/core')
-rw-r--r-- | dbaccess/source/core/dataaccess/ComponentDefinition.cxx | 16 | ||||
-rw-r--r-- | dbaccess/source/core/dataaccess/ComponentDefinition.hxx | 3 |
2 files changed, 11 insertions, 8 deletions
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; |