From 2a0c7ae7715fc7f05566614dcbc9a722f6e67f39 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Wed, 30 Jun 2021 16:25:38 +0200 Subject: [PATCH] Fix a memory leak in TraceAnalyzer A memory leak was fixed by replacing std::shared_ptr with std::weak_ptr in phase.h and phase.cpp for the pointer to its transaction. Not checking if the transaction is still valid is ok, because the transaction outlives the phase. --- .../traceAnalyzer/businessObjects/phases/phase.cpp | 12 ++++++------ DRAMSys/traceAnalyzer/businessObjects/phases/phase.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp index 1f0308f9..a5c6e5d3 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp @@ -129,22 +129,22 @@ QColor Phase::getColor(const TraceDrawingProperties &drawingProperties) const break; case ColorGrouping::Thread: return ColorGenerator::getColor(static_cast - (transaction->thread)); + (transaction.lock()->thread)); break; case ColorGrouping::Transaction: default: - return ColorGenerator::getColor(transaction->id); + return ColorGenerator::getColor(transaction.lock()->id); } } int Phase::getYVal(const TraceDrawingProperties &drawingProperties) const { if (getGranularity() == Granularity::Bankwise) - return drawingProperties.getYValOfBank(transaction->bank); + return drawingProperties.getYValOfBank(transaction.lock()->bank); else if (getGranularity() == Granularity::Groupwise) - return drawingProperties.getYValOfBankGroup(transaction->rank, transaction->bank); + return drawingProperties.getYValOfBankGroup(transaction.lock()->rank, transaction.lock()->bank); else // if (getGranularity() == Granularity::Rankwise) - return drawingProperties.getYValOfRank(transaction->rank); + return drawingProperties.getYValOfRank(transaction.lock()->rank); } Qt::BrushStyle Phase::getBrushStyle() const @@ -206,5 +206,5 @@ bool Phase::isCollapsed(const TraceDrawingProperties &drawingProperties) const if (dynamic_cast(this) != nullptr || dynamic_cast(this) != nullptr) return false; - return drawingProperties.getRankCollapsedState(transaction->rank); + return drawingProperties.getRankCollapsedState(transaction.lock()->rank); } diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h index 986c0654..8e1bb888 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h @@ -80,7 +80,7 @@ protected: ID id; Timespan span; traceTime clk; - std::shared_ptr transaction; + std::weak_ptr transaction; std::vector spansOnCommandBus; std::shared_ptr spanOnDataBus; double hexagonHeight;