From 569c2321fbc79390f22698664df58c9d2d280357 Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Sat, 27 Jul 2024 09:47:16 +0200 Subject: [PATCH 1/2] prevent potential memory leak from GenericPolyRenderable --- GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h b/GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h index 6eb3d28b0..d7e618a90 100644 --- a/GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h +++ b/GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h @@ -35,6 +35,9 @@ class GameWorldRenderer { GenericPolyRenderable& operator=(GenericPolyRenderable&& other) noexcept { + if (vb != nullptr) { + vb->Release(); + } vb = other.vb; // Move the buffer! other.vb = nullptr; points = std::move(other.points); From 1188225c310f5ebe2d7e8758996ebc7f9a92f376 Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Sat, 27 Jul 2024 09:51:33 +0200 Subject: [PATCH 2/2] copy all the bits --- GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h b/GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h index d7e618a90..392193030 100644 --- a/GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h +++ b/GWToolboxdll/Widgets/Minimap/GameWorldRenderer.h @@ -17,17 +17,15 @@ class GameWorldRenderer { GenericPolyRenderable(const GenericPolyRenderable& other) = delete; GenericPolyRenderable(GenericPolyRenderable&& other) noexcept - : vb(other.vb), map_id(other.map_id) - , col(other.col) + : map_id(other.map_id), col(other.col) , filled(other.filled) - , all_altitudes_queried(other.all_altitudes_queried) + , vb(other.vb) , cur_altitude(other.cur_altitude) + , all_altitudes_queried(other.all_altitudes_queried) { other.vb = nullptr; points = std::move(other.points); - other.points.clear(); vertices = std::move(other.vertices); - other.vertices.clear(); } // copy not allowed @@ -41,9 +39,12 @@ class GameWorldRenderer { vb = other.vb; // Move the buffer! other.vb = nullptr; points = std::move(other.points); - other.points.clear(); vertices = std::move(other.vertices); - other.vertices.clear(); + map_id = other.map_id; + col = other.col; + filled = other.filled; + all_altitudes_queried = other.all_altitudes_queried; + cur_altitude = other.cur_altitude; return *this; }