summaryrefslogtreecommitdiff
path: root/dbaccess/source/core
diff options
context:
space:
mode:
authorMichael Stahl <Michael.Stahl@cib.de>2019-05-29 14:42:06 +0200
committerMichael Stahl <Michael.Stahl@cib.de>2019-05-31 13:22:58 +0200
commit7d582d1f9767c0ebd5e319f2fd11711e60cd72fa (patch)
tree21e6c464719bf2f90e153d06214e932a132cc968 /dbaccess/source/core
parent6f613f973dcb86dbebc212bc466fbaa2b002655b (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.cxx16
-rw-r--r--dbaccess/source/core/dataaccess/ComponentDefinition.hxx3
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;