From bea5cc7dfd80f760d6fe1ff1b16c1b056d30e706 Mon Sep 17 00:00:00 2001 From: Guillaume Pasero <guillaume.pasero@c-s.fr> Date: Fri, 12 Jul 2019 12:07:11 +0200 Subject: [PATCH] BUG: ProductFormatter doesn't have to be a LightObject, avoid memory leak --- ProductFormatter/include/ProductCreatorAdapter.h | 9 +++++++-- ProductFormatter/include/ProductCreatorSentinelMuscate.h | 5 +++++ ProductFormatter/include/ProductCreatorVenusMuscate.h | 5 +++++ ProductFormatter/src/ProductCreatorAdapter.cpp | 5 +++++ ProductFormatter/src/ProductCreatorSentinelMuscate.cpp | 5 +++++ ProductFormatter/src/ProductCreatorVenusMuscate.cpp | 5 +++++ ProductFormatter/src/ProductFormatter.cpp | 2 -- 7 files changed, 32 insertions(+), 4 deletions(-) diff --git a/ProductFormatter/include/ProductCreatorAdapter.h b/ProductFormatter/include/ProductCreatorAdapter.h index c6d4b9c..c16922a 100644 --- a/ProductFormatter/include/ProductCreatorAdapter.h +++ b/ProductFormatter/include/ProductCreatorAdapter.h @@ -34,7 +34,6 @@ #include "ProductDefinitions.h" #include "BaseImageTypes.h" #include "otbVectorImageToImageListFilter.h" -#include "itkLightObject.h" /** * @brief The TemporalSynthesis namespace, covering all needed functions to execute this processing chain @@ -44,8 +43,14 @@ namespace ts { /** * @brief Adapter for all Product-formatters of each platform */ -class ProductCreatorAdapter : public itk::LightObject, public BaseImageTypes{ +class ProductCreatorAdapter : public BaseImageTypes{ public: + /** + * @brief Get the name of this class + * @return the class name + */ + virtual const char * GetNameOfClass() const; + /** * @brief Initialize a ProductFormatter * @param products The input product filenames diff --git a/ProductFormatter/include/ProductCreatorSentinelMuscate.h b/ProductFormatter/include/ProductCreatorSentinelMuscate.h index 4d962fb..5d86487 100644 --- a/ProductFormatter/include/ProductCreatorSentinelMuscate.h +++ b/ProductFormatter/include/ProductCreatorSentinelMuscate.h @@ -37,6 +37,11 @@ namespace ts { class ProductCreatorSentinelMuscate : public ProductCreatorAdapter{ public: + /** + * @brief Get the name of this class + * @return the class name + */ + virtual const char * GetNameOfClass() const; /** * @brief Create a Sentinel-2 Muscate product inside the specified destination-folder diff --git a/ProductFormatter/include/ProductCreatorVenusMuscate.h b/ProductFormatter/include/ProductCreatorVenusMuscate.h index 557b2a3..bb3bf59 100644 --- a/ProductFormatter/include/ProductCreatorVenusMuscate.h +++ b/ProductFormatter/include/ProductCreatorVenusMuscate.h @@ -38,6 +38,11 @@ namespace ts { class ProductCreatorVenusMuscate : public ProductCreatorAdapter{ public: + /** + * @brief Get the name of this class + * @return the class name + */ + virtual const char * GetNameOfClass() const; /** * @brief Create a Venus Muscate product inside the specified destination-folder diff --git a/ProductFormatter/src/ProductCreatorAdapter.cpp b/ProductFormatter/src/ProductCreatorAdapter.cpp index abf894f..83afdff 100644 --- a/ProductFormatter/src/ProductCreatorAdapter.cpp +++ b/ProductFormatter/src/ProductCreatorAdapter.cpp @@ -37,6 +37,11 @@ using namespace ts; +const char * ProductCreatorAdapter::GetNameOfClass() const +{ + return "ProductCreatorAdapter"; +} + void ProductCreatorAdapter::FillMetadataInfo(std::shared_ptr<MuscateFileMetadata> &metadata) { m_tileID = metadata->DatasetIdentification.GeographicalZone; diff --git a/ProductFormatter/src/ProductCreatorSentinelMuscate.cpp b/ProductFormatter/src/ProductCreatorSentinelMuscate.cpp index e03a5f4..3219d39 100644 --- a/ProductFormatter/src/ProductCreatorSentinelMuscate.cpp +++ b/ProductFormatter/src/ProductCreatorSentinelMuscate.cpp @@ -33,6 +33,11 @@ using namespace ts; +const char * ProductCreatorSentinelMuscate::GetNameOfClass() const +{ + return "ProductCreatorSentinelMuscate"; +} + bool ProductCreatorSentinelMuscate::createProduct(const std::string &destination){ m_strDestRoot = destination; std::cout << "Sentinel ProductFormatter: " << destination << std::endl; diff --git a/ProductFormatter/src/ProductCreatorVenusMuscate.cpp b/ProductFormatter/src/ProductCreatorVenusMuscate.cpp index 3b1834b..4268a9d 100644 --- a/ProductFormatter/src/ProductCreatorVenusMuscate.cpp +++ b/ProductFormatter/src/ProductCreatorVenusMuscate.cpp @@ -31,6 +31,11 @@ using namespace ts; +const char * ProductCreatorVenusMuscate::GetNameOfClass() const +{ + return "ProductCreatorVenusMuscate"; +} + bool ProductCreatorVenusMuscate::createProduct(const std::string &destination){ m_strDestRoot = destination; std::cout << "Venus ProductFormatter: " << destination << std::endl; diff --git a/ProductFormatter/src/ProductFormatter.cpp b/ProductFormatter/src/ProductFormatter.cpp index 0d2cdfd..b81fdbc 100644 --- a/ProductFormatter/src/ProductFormatter.cpp +++ b/ProductFormatter/src/ProductFormatter.cpp @@ -145,8 +145,6 @@ private: if(m_creator->createProduct(destination) == false){ itkExceptionMacro("Error in product creation of " << destination); } - m_creator.release(); //needed as otherwise ITK will throw a warning about deletion of a still-referenced object - return; } /** -- GitLab