Kaydet (Commit) 7d582d1f authored tarafından Michael Stahl's avatar Michael Stahl

dbaccess: fix more memory leaks caused by circular Reference

Followup to 96ae2a33; more overridden
acquire() creating cycles in dbaccess.

(regression from 2660d24a)

Change-Id: I134343b3afbcd5ee3f71212ec18e551455eaee5b
Reviewed-on: https://gerrit.libreoffice.org/73158Reviewed-by: 's avatarMichael Stahl <Michael.Stahl@cib.de>
Tested-by: 's avatarMichael Stahl <Michael.Stahl@cib.de>
üst 6f613f97
...@@ -157,9 +157,10 @@ Sequence< OUString > SAL_CALL OComponentDefinition::getSupportedServiceNames() ...@@ -157,9 +157,10 @@ Sequence< OUString > SAL_CALL OComponentDefinition::getSupportedServiceNames()
void SAL_CALL OComponentDefinition::disposing() void SAL_CALL OComponentDefinition::disposing()
{ {
OContentHelper::disposing(); OContentHelper::disposing();
if ( m_xColumns.is() ) if (m_pColumns)
m_xColumns->disposing(); {
m_xColumns.clear(); m_pColumns->disposing();
}
m_xColumnPropertyListener->clear(); m_xColumnPropertyListener->clear();
m_xColumnPropertyListener.clear(); m_xColumnPropertyListener.clear();
} }
...@@ -194,7 +195,7 @@ Reference< XNameAccess> OComponentDefinition::getColumns() ...@@ -194,7 +195,7 @@ Reference< XNameAccess> OComponentDefinition::getColumns()
::osl::MutexGuard aGuard(m_aMutex); ::osl::MutexGuard aGuard(m_aMutex);
::connectivity::checkDisposed(OContentHelper::rBHelper.bDisposed); ::connectivity::checkDisposed(OContentHelper::rBHelper.bDisposed);
if ( !m_xColumns.is() ) if (!m_pColumns)
{ {
std::vector< OUString> aNames; std::vector< OUString> aNames;
...@@ -204,10 +205,11 @@ Reference< XNameAccess> OComponentDefinition::getColumns() ...@@ -204,10 +205,11 @@ Reference< XNameAccess> OComponentDefinition::getColumns()
for (auto const& definition : rDefinition) for (auto const& definition : rDefinition)
aNames.push_back(definition.first); aNames.push_back(definition.first);
m_xColumns = new OColumns( *this, m_aMutex, true, aNames, this, nullptr, true, false, false ); m_pColumns.reset(new OColumns(*this, m_aMutex, true, aNames, this, nullptr, true, false, false));
m_xColumns->setParent( *this ); m_pColumns->setParent(*this);
} }
return m_xColumns.get(); // see OCollection::acquire
return m_pColumns.get();
} }
OColumn* OComponentDefinition::createColumn(const OUString& _rName) const OColumn* OComponentDefinition::createColumn(const OUString& _rName) const
......
...@@ -84,7 +84,8 @@ class OComponentDefinition :public OContentHelper ...@@ -84,7 +84,8 @@ class OComponentDefinition :public OContentHelper
,public OComponentDefinition_BASE ,public OComponentDefinition_BASE
,public ::comphelper::OPropertyArrayUsageHelper< OComponentDefinition > ,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; rtl::Reference<OColumnPropertyListener> m_xColumnPropertyListener;
bool m_bTable; bool m_bTable;
......
...@@ -39,10 +39,11 @@ namespace dbaui ...@@ -39,10 +39,11 @@ namespace dbaui
// OSingleDocumentController_Data // OSingleDocumentController_Data
struct 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 ) 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 ...@@ -62,7 +63,7 @@ namespace dbaui
{ {
OSingleDocumentController_Base::disposing(); OSingleDocumentController_Base::disposing();
ClearUndoManager(); ClearUndoManager();
m_pData->m_xUndoManager->disposing(); m_pData->m_pUndoManager->disposing();
} }
void OSingleDocumentController::ClearUndoManager() void OSingleDocumentController::ClearUndoManager()
...@@ -72,7 +73,7 @@ namespace dbaui ...@@ -72,7 +73,7 @@ namespace dbaui
SfxUndoManager& OSingleDocumentController::GetUndoManager() const SfxUndoManager& OSingleDocumentController::GetUndoManager() const
{ {
return m_pData->m_xUndoManager->GetSfxUndoManager(); return m_pData->m_pUndoManager->GetSfxUndoManager();
} }
void OSingleDocumentController::addUndoActionAndInvalidate(std::unique_ptr<SfxUndoAction> _pAction) void OSingleDocumentController::addUndoActionAndInvalidate(std::unique_ptr<SfxUndoAction> _pAction)
...@@ -90,7 +91,8 @@ namespace dbaui ...@@ -90,7 +91,8 @@ namespace dbaui
Reference< XUndoManager > SAL_CALL OSingleDocumentController::getUndoManager( ) 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 FeatureState OSingleDocumentController::GetState(sal_uInt16 _nId) const
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment