From 772e7ec7e65897f8cb70a09ed50bd4556ccb2cd9 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Tue, 22 May 2018 09:22:12 +0200 Subject: [PATCH] Revert "#2873 Delegate deletion of summary cases to separate thread." This reverts commit 0089e0c21894eefd212570a5c45d1bc1e3fbe0ed. Didn't intend this to go into dev now --- .../Commands/RicCloseSummaryCaseFeature.cpp | 7 +- .../Commands/RicCloseSummaryCaseFeature.h | 2 +- .../Summary/RimSummaryCaseCollection.cpp | 2 +- .../Summary/RimSummaryCaseMainCollection.cpp | 4 +- .../cafPdmCore/CMakeLists.txt | 3 - .../cafPdmCore/cafAsyncObjectDeleter.h | 64 --------------- .../cafPdmCore/cafAsyncObjectDeleter.inl | 78 ------------------- .../cafPdmCore/cafPdmChildArrayField.h | 3 +- .../cafPdmCore/cafPdmChildArrayField.inl | 15 ---- 9 files changed, 8 insertions(+), 170 deletions(-) delete mode 100644 Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafAsyncObjectDeleter.h delete mode 100644 Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafAsyncObjectDeleter.inl diff --git a/ApplicationCode/Commands/RicCloseSummaryCaseFeature.cpp b/ApplicationCode/Commands/RicCloseSummaryCaseFeature.cpp index b2d08b010e..8471ef0cd7 100644 --- a/ApplicationCode/Commands/RicCloseSummaryCaseFeature.cpp +++ b/ApplicationCode/Commands/RicCloseSummaryCaseFeature.cpp @@ -30,7 +30,6 @@ #include "RiuPlotMainWindow.h" -#include "cafAsyncObjectDeleter.h" #include "cafSelectionManager.h" #include "cvfAssert.h" @@ -51,7 +50,7 @@ void RicCloseSummaryCaseFeature::setupActionLook(QAction* actionToSetup) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicCloseSummaryCaseFeature::deleteSummaryCases(std::vector& cases) +void RicCloseSummaryCaseFeature::deleteSummaryCases(const std::vector& cases) { RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection(); @@ -67,13 +66,13 @@ void RicCloseSummaryCaseFeature::deleteSummaryCases(std::vector summaryCase->firstAncestorOrThisOfTypeAsserted(summaryCaseMainCollection); summaryCaseMainCollection->removeCase(summaryCase); + delete summaryCase; + summaryCaseMainCollection->updateAllRequiredEditors(); } RiuPlotMainWindow* mainPlotWindow = RiaApplication::instance()->mainPlotWindow(); mainPlotWindow->updateSummaryPlotToolBar(); - - caf::AsyncRawPointerVectorDeleter summaryCaseDeleter(std::move(cases)); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/RicCloseSummaryCaseFeature.h b/ApplicationCode/Commands/RicCloseSummaryCaseFeature.h index c0a45ce5f5..d987aba447 100644 --- a/ApplicationCode/Commands/RicCloseSummaryCaseFeature.h +++ b/ApplicationCode/Commands/RicCloseSummaryCaseFeature.h @@ -32,7 +32,7 @@ class RicCloseSummaryCaseFeature : public caf::CmdFeature { CAF_CMD_HEADER_INIT; public: - static void deleteSummaryCases(std::vector& cases); + static void deleteSummaryCases(const std::vector& cases); protected: // Overrides diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp index 5c70c6ca96..6d962faaff 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp @@ -53,7 +53,7 @@ RimSummaryCaseCollection::RimSummaryCaseCollection() //-------------------------------------------------------------------------------------------------- RimSummaryCaseCollection::~RimSummaryCaseCollection() { - m_cases.deleteAllChildObjectsAsync(); + m_cases.deleteAllChildObjects(); updateReferringCurveSets(); } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp index e1db6de4c7..45b2a78c0c 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp @@ -75,8 +75,8 @@ RimSummaryCaseMainCollection::RimSummaryCaseMainCollection() //-------------------------------------------------------------------------------------------------- RimSummaryCaseMainCollection::~RimSummaryCaseMainCollection() { - m_cases.deleteAllChildObjectsAsync(); - m_caseCollections.deleteAllChildObjectsAsync(); + m_cases.deleteAllChildObjects(); + m_caseCollections.deleteAllChildObjects(); } //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/CMakeLists.txt b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/CMakeLists.txt index 12068aa1f4..40e8db36b0 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/CMakeLists.txt +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/CMakeLists.txt @@ -45,9 +45,6 @@ set( PROJECT_FILES cafTristate.h cafFilePath.cpp cafFilePath.h - cafAsyncObjectDeleter.h - cafAsyncObjectDeleter.inl - ) add_library( ${PROJECT_NAME} diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafAsyncObjectDeleter.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafAsyncObjectDeleter.h deleted file mode 100644 index 11865a7412..0000000000 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafAsyncObjectDeleter.h +++ /dev/null @@ -1,64 +0,0 @@ -//################################################################################################## -// -// Custom Visualization Core library -// Copyright (C) 2011-2013 Ceetron AS -// -// This library may be used under the terms of either the GNU General Public License or -// the GNU Lesser General Public License as follows: -// -// GNU General Public License Usage -// This library is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at <> -// for more details. -// -// GNU Lesser General Public License Usage -// This library is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation; either version 2.1 of the License, or -// (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU Lesser General Public License at <> -// for more details. -// -//################################################################################################## - -#pragma once - -namespace caf -{ - template - class AsyncRawPointerVectorDeleter - { - public: - AsyncRawPointerVectorDeleter(std::vector&& pointerVector); - ~AsyncRawPointerVectorDeleter(); - void start(); - private: - std::vector pointersToDelete_; - }; - - template - class AsyncPdmPointerVectorDeleter - { - public: - AsyncPdmPointerVectorDeleter(std::vector>&& pdmPointerVector); - ~AsyncPdmPointerVectorDeleter(); - void start(); - private: - std::vector> pointersToDelete_; - }; -} - -#include "cafAsyncObjectDeleter.inl" \ No newline at end of file diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafAsyncObjectDeleter.inl b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafAsyncObjectDeleter.inl deleted file mode 100644 index fb5f03e932..0000000000 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafAsyncObjectDeleter.inl +++ /dev/null @@ -1,78 +0,0 @@ -#include - -namespace caf -{ - //-------------------------------------------------------------------------------------------------- - /// Constructor that takes ownership of the data in the provided vector - //-------------------------------------------------------------------------------------------------- - template - AsyncRawPointerVectorDeleter::AsyncRawPointerVectorDeleter(std::vector&& pointerVector) - : pointersToDelete_(std::move(pointerVector)) - { - } - - //-------------------------------------------------------------------------------------------------- - /// Destructor will launch the asynchronous deletion if start() hasn't already been run. - //-------------------------------------------------------------------------------------------------- - template - AsyncRawPointerVectorDeleter::~AsyncRawPointerVectorDeleter() - { - if (!pointersToDelete_.empty()) - { - start(); - } - } - - //-------------------------------------------------------------------------------------------------- - /// Perform deletion of the pointers in a separate thread. - //-------------------------------------------------------------------------------------------------- - template - void AsyncRawPointerVectorDeleter::start() - { - std::thread([](std::vector&& pointerVector) - { - for (T* pointerToDelete : pointerVector) - { - delete pointerToDelete; - } - }, std::move(pointersToDelete_)).detach(); - } - - - //-------------------------------------------------------------------------------------------------- - /// Constructor that takes ownership of the data in the provided vector - //-------------------------------------------------------------------------------------------------- - template - AsyncPdmPointerVectorDeleter::AsyncPdmPointerVectorDeleter(std::vector>&& pdmPointerVector) - : pointersToDelete_(std::move(pdmPointerVector)) - { - } - - //-------------------------------------------------------------------------------------------------- - /// Destructor will launch the asynchronous deletion if start() hasn't already been run. - //-------------------------------------------------------------------------------------------------- - template - AsyncPdmPointerVectorDeleter::~AsyncPdmPointerVectorDeleter() - { - if (!pointersToDelete_.empty()) - { - start(); - } - } - - //-------------------------------------------------------------------------------------------------- - /// Perform deletion of the pointers in a separate thread. - //-------------------------------------------------------------------------------------------------- - template - void caf::AsyncPdmPointerVectorDeleter::start() - { - std::thread([](std::vector>&& pointerVector) - { - for (PdmPointer& pointerToDelete : pointerVector) - { - delete pointerToDelete.rawPtr(); - } - }, std::move(pointersToDelete_)).detach(); - } - -} \ No newline at end of file diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmChildArrayField.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmChildArrayField.h index 311b8dc182..c3546cecd8 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmChildArrayField.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmChildArrayField.h @@ -61,8 +61,7 @@ class PdmChildArrayField : public PdmChildArrayFieldHandle virtual size_t size() const { return m_pointers.size(); } virtual bool empty() const { return m_pointers.empty(); } virtual void clear(); - virtual void deleteAllChildObjects(); - virtual void deleteAllChildObjectsAsync(); + virtual void deleteAllChildObjects(); virtual void insertAt(int indexAfter, PdmObjectHandle* obj); virtual PdmObjectHandle* at(size_t index); diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmChildArrayField.inl b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmChildArrayField.inl index 1b5c73eba0..019111b2e5 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmChildArrayField.inl +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmChildArrayField.inl @@ -1,4 +1,3 @@ -#include "cafAsyncObjectDeleter.h" #include "cafClassTypeName.h" #include "cafPdmObjectHandle.h" @@ -139,20 +138,6 @@ void PdmChildArrayField::deleteAllChildObjects() m_pointers.clear(); } -//-------------------------------------------------------------------------------------------------- -/// Transfers ownership of the objects pointed to a separate thread. -/// Then clears the container and lets the thread delete the objects. -//-------------------------------------------------------------------------------------------------- -template -void PdmChildArrayField::deleteAllChildObjectsAsync() -{ - CAF_ASSERT(isInitializedByInitFieldMacro()); - - AsyncPdmPointerVectorDeleter pointerDeleter(std::move(m_pointers)); - CAF_ASSERT(m_pointers.empty()); // Object storage for m_pointers should be empty immediately. -} - - //-------------------------------------------------------------------------------------------------- /// Removes the pointer at index from the container. Does not delete the object pointed to. /// Todo: This implementation can't be necessary in the new regime. Should be to just remove