From 19aba581d4de02d4b6ad6a65a150baa0d308d237 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Wed, 11 Oct 2023 14:41:22 +0000 Subject: [PATCH] fix: remove potential memory leak from OaMetricSourceImp class Related-To: NEO-9038 Signed-off-by: Mateusz Jablonski --- .../tools/source/metrics/metric_oa_source.cpp | 10 ---------- level_zero/tools/source/metrics/metric_oa_source.h | 14 +++++++------- .../unit_tests/sources/metrics/mock_metric_oa.cpp | 8 ++++++-- .../sources/metrics/mock_metric_oa_enumeration.cpp | 8 ++++++-- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/level_zero/tools/source/metrics/metric_oa_source.cpp b/level_zero/tools/source/metrics/metric_oa_source.cpp index 82d02ea81f..c6e23499ce 100644 --- a/level_zero/tools/source/metrics/metric_oa_source.cpp +++ b/level_zero/tools/source/metrics/metric_oa_source.cpp @@ -139,16 +139,6 @@ void OaMetricSourceImp::setMetricStreamer(MetricStreamer *pMetricStreamer) { this->pMetricStreamer = pMetricStreamer; } -void OaMetricSourceImp::setMetricsLibrary(MetricsLibrary &metricsLibrary) { - this->metricsLibrary.release(); - this->metricsLibrary.reset(&metricsLibrary); -} - -void OaMetricSourceImp::setMetricEnumeration(MetricEnumeration &metricEnumeration) { - this->metricEnumeration.release(); - this->metricEnumeration.reset(&metricEnumeration); -} - void OaMetricSourceImp::setUseCompute(const bool useCompute) { this->useCompute = useCompute; } diff --git a/level_zero/tools/source/metrics/metric_oa_source.h b/level_zero/tools/source/metrics/metric_oa_source.h index 092e2f45e7..33ad88d76b 100644 --- a/level_zero/tools/source/metrics/metric_oa_source.h +++ b/level_zero/tools/source/metrics/metric_oa_source.h @@ -8,15 +8,15 @@ #pragma once #include "level_zero/tools/source/metrics/metric.h" -#include "level_zero/tools/source/metrics/metric_oa_enumeration_imp.h" -#include "level_zero/tools/source/metrics/metric_oa_query_imp.h" -#include "level_zero/tools/source/metrics/metric_oa_streamer_imp.h" namespace NEO { class OsLibrary; } // namespace NEO namespace L0 { +struct MetricEnumeration; +struct MetricsLibrary; +struct MetricsStreamer; class OaMetricSourceImp : public MetricSource { @@ -35,8 +35,8 @@ class OaMetricSourceImp : public MetricSource { MetricEnumeration &getMetricEnumeration(); MetricStreamer *getMetricStreamer(); void setMetricStreamer(MetricStreamer *pMetricStreamer); - void setMetricsLibrary(MetricsLibrary &metricsLibrary); - void setMetricEnumeration(MetricEnumeration &metricEnumeration); + std::unique_ptr &getMetricsLibraryObject() { return metricsLibrary; } + std::unique_ptr &getMetricEnumerationObject() { return metricEnumeration; } ze_result_t getTimerResolution(uint64_t &resolution) override; ze_result_t getTimestampValidBits(uint64_t &validBits) override; @@ -60,8 +60,8 @@ class OaMetricSourceImp : public MetricSource { protected: ze_result_t initializationState = ZE_RESULT_ERROR_UNINITIALIZED; const MetricDeviceContext &metricDeviceContext; - std::unique_ptr metricEnumeration = nullptr; - std::unique_ptr metricsLibrary = nullptr; + std::unique_ptr metricEnumeration; + std::unique_ptr metricsLibrary; MetricStreamer *pMetricStreamer = nullptr; bool useCompute = false; std::unique_ptr metricOAOsInterface = nullptr; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa.cpp b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa.cpp index 079113b72d..9016e921b8 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa.cpp @@ -361,7 +361,9 @@ void Mock::setMockedApi(MockMetricsLibraryApi *mockedApi) { // Mock class used to communicate with metrics library. metricsLibrary = &metricSource.getMetricsLibrary(); - metricSource.setMetricsLibrary(*this); + auto &actualMetricsLibrary = metricSource.getMetricsLibraryObject(); + actualMetricsLibrary.release(); + actualMetricsLibrary.reset(this); // Mock metrics library api functions. contextCreateFunction = mockedApi->contextCreate; @@ -394,7 +396,9 @@ void Mock::setMockedApi(MockMetricsLibraryApi *mockedApi) { } else { // Restore an original class used to communicate with metrics library. - metricSource.setMetricsLibrary(*metricsLibrary); + auto &actualMetricsLibrary = metricSource.getMetricsLibraryObject(); + actualMetricsLibrary.release(); + actualMetricsLibrary.reset(metricsLibrary); } } diff --git a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.cpp b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.cpp index a7eb0163e5..56ddb7d3b7 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/mock_metric_oa_enumeration.cpp @@ -42,7 +42,9 @@ void Mock::setMockedApi(MockMetricsDiscoveryApi *mockedApi) { // Mock class used to communicate with metrics library. metricEnumeration = &metricSource.getMetricEnumeration(); - metricSource.setMetricEnumeration(*this); + auto &actualMetricEnumeration = metricSource.getMetricEnumerationObject(); + actualMetricEnumeration.release(); + actualMetricEnumeration.reset(this); // Mock metrics library api functions. openAdapterGroup = mockedApi->OpenAdapterGroup; @@ -53,7 +55,9 @@ void Mock::setMockedApi(MockMetricsDiscoveryApi *mockedApi) { } else { // Restore an original class used to communicate with metrics library. - metricSource.setMetricEnumeration(*metricEnumeration); + auto &actualMetricEnumeration = metricSource.getMetricEnumerationObject(); + actualMetricEnumeration.release(); + actualMetricEnumeration.reset(metricEnumeration); } }