From 6917bf9ecb481e60fb68a0d6e8385feb0fa4246d Mon Sep 17 00:00:00 2001 From: Greg Eisenhauer Date: Wed, 10 May 2023 13:48:50 -0400 Subject: [PATCH] Fix memory leak when there are Joined Arrays in streaming mode --- source/adios2/toolkit/format/bp5/BP5Deserializer.cpp | 10 ++++++++-- source/adios2/toolkit/format/bp5/BP5Deserializer.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp b/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp index 17a0cc57d5..aed65d039f 100644 --- a/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp +++ b/source/adios2/toolkit/format/bp5/BP5Deserializer.cpp @@ -708,7 +708,7 @@ void BP5Deserializer::InstallMetaData(void *MetadataBlock, size_t BlockLen, m_JoinedDimenOffsetArrays = new std::vector(); m_JoinedDimenOffsetArrays->resize(writerCohortSize); JoinedDimArray[Step] = m_JoinedDimenOffsetArrays; - m_FreeableMBA = nullptr; + m_FreeableJDOA = nullptr; } } else @@ -726,7 +726,7 @@ void BP5Deserializer::InstallMetaData(void *MetadataBlock, size_t BlockLen, if (!m_JoinedDimenOffsetArrays) { m_JoinedDimenOffsetArrays = new std::vector(); - m_FreeableMBA = m_JoinedDimenOffsetArrays; + m_FreeableJDOA = m_JoinedDimenOffsetArrays; } if (writerCohortSize > m_JoinedDimenOffsetArrays->size()) { @@ -2003,7 +2003,13 @@ BP5Deserializer::~BP5Deserializer() delete VarRec.second; } if (m_FreeableMBA) + { delete m_FreeableMBA; + } + if (m_FreeableJDOA) + { + delete m_FreeableJDOA; + } for (auto &step : MetadataBaseArray) { delete step; diff --git a/source/adios2/toolkit/format/bp5/BP5Deserializer.h b/source/adios2/toolkit/format/bp5/BP5Deserializer.h index b7f6e2e082..d1c932dc79 100644 --- a/source/adios2/toolkit/format/bp5/BP5Deserializer.h +++ b/source/adios2/toolkit/format/bp5/BP5Deserializer.h @@ -174,6 +174,7 @@ class BP5Deserializer : virtual public BP5Base std::vector *m_FreeableMBA = nullptr; std::vector *m_JoinedDimenOffsetArrays = nullptr; + std::vector *m_FreeableJDOA = nullptr; // for random access mode, for each timestep, for each writerrank, what // metameta info applies to the metadata