From 119367783ba5ed0e5b59fbe841ed8bb28d6f8488 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 19 May 2022 11:51:22 +0200 Subject: [PATCH] Fix memory leak for data source ensemble summary (#8919) * Do not create summary case group twice * Fix memory leak of objects contained in childArrayFields Use deleteAllChildObjects to delete objects instead of clear() Rename collection function clear() -> deleteAllChildObjects * Early exit for empty path * Reduce redundant calls to refreshMetaData --- ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp | 1 - .../ProjectDataModel/Summary/RimFileSummaryCase.cpp | 1 + .../Summary/RimSummaryAddressCollection.cpp | 6 +++--- .../ProjectDataModel/Summary/RimSummaryAddressCollection.h | 2 +- .../ProjectDataModel/Summary/RimSummaryCase.cpp | 4 +--- .../ProjectDataModel/Summary/RimSummaryCaseCollection.cpp | 2 +- .../Summary/RimSummaryCaseMainCollection.cpp | 2 -- 7 files changed, 7 insertions(+), 11 deletions(-) diff --git a/ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp b/ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp index 820bfc4d4b..a1fb19c641 100644 --- a/ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp +++ b/ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp @@ -112,7 +112,6 @@ void RicImportEnsembleFeature::importSingleEnsemble( const QStringList& if ( cases.empty() ) return; - RicImportSummaryCasesFeature::addSummaryCases( cases ); RimSummaryCaseCollection* ensemble = RicCreateSummaryCaseCollectionFeature::groupSummaryCases( cases, ensembleName, true ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp index 97299d57fe..db06b19659 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp @@ -225,6 +225,7 @@ void RimFileSummaryCase::defineEditorAttribute( const caf::PdmFieldHandle* field void RimFileSummaryCase::openAndAttachAdditionalReader() { QString additionalSummaryFilePath = m_additionalSummaryFilePath().path(); + if ( additionalSummaryFilePath.isEmpty() ) return; cvf::ref opmCommonReader = new RifOpmCommonEclipseSummary; opmCommonReader->useEnhancedSummaryFiles( true ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.cpp index 560a4a3f6a..e4c22ff70e 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.cpp @@ -333,10 +333,10 @@ RimSummaryAddressCollection* RimSummaryAddressCollection::getOrCreateSubfolder( //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryAddressCollection::clear() +void RimSummaryAddressCollection::deleteAllChildObjects() { - m_adresses.clear(); - m_subfolders.clear(); + m_adresses.deleteAllChildObjects(); + m_subfolders.deleteAllChildObjects(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.h index 29f0b14111..62f4f107bd 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.h @@ -64,7 +64,7 @@ public: void updateFolderStructure( const std::set& addresses, int caseId, int ensembleId = -1 ); - void clear(); + void deleteAllChildObjects(); bool isEmpty() const; bool isEnsemble() const; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp index 7436f8a121..23456b0108 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp @@ -222,7 +222,7 @@ QString RimSummaryCase::errorMessagesFromReader() //-------------------------------------------------------------------------------------------------- void RimSummaryCase::buildChildNodes() { - m_dataVectorFolders->clear(); + m_dataVectorFolders->deleteAllChildObjects(); RifSummaryReaderInterface* reader = summaryReader(); if ( !reader ) return; @@ -322,8 +322,6 @@ void RimSummaryCase::initAfterRead() } updateOptionSensitivity(); - - refreshMetaData(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp index 3a883c7816..f72529846c 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp @@ -1098,5 +1098,5 @@ void RimSummaryCaseCollection::refreshMetaData() //-------------------------------------------------------------------------------------------------- void RimSummaryCaseCollection::clearChildNodes() { - m_dataVectorFolders->clear(); + m_dataVectorFolders->deleteAllChildObjects(); } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp index 48d71dfffc..76b561e14e 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp @@ -656,7 +656,6 @@ std::vector RimSummaryCaseMainCollection::createSummaryCasesFro newSumCase->setAssociatedEclipseCase( eclCase ); newSumCase->updateOptionSensitivity(); project->assignCaseIdToSummaryCase( newSumCase ); - newSumCase->refreshMetaData(); sumCases.push_back( newSumCase ); } else @@ -671,7 +670,6 @@ std::vector RimSummaryCaseMainCollection::createSummaryCasesFro newSumCase->setSummaryHeaderFileName( smspecFileName ); newSumCase->updateOptionSensitivity(); project->assignCaseIdToSummaryCase( newSumCase ); - newSumCase->refreshMetaData(); sumCases.push_back( newSumCase ); }