From a9bf4bc6a6211319eb6b24b5c6bdd35228c05028 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Thu, 29 Oct 2020 13:18:15 +0000 Subject: [PATCH] Fix freed-memory crasher. While the DRC_ENGINE is not long-lived, it's test providers are, and must be cleared for each use. --- pcbnew/drc/drc_rtree.h | 4 ++-- pcbnew/drc/drc_test_provider_copper_clearance.cpp | 3 ++- pcbnew/drc/drc_test_provider_hole_clearance.cpp | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pcbnew/drc/drc_rtree.h b/pcbnew/drc/drc_rtree.h index c3423c98ff..2365d90bed 100644 --- a/pcbnew/drc/drc_rtree.h +++ b/pcbnew/drc/drc_rtree.h @@ -1,7 +1,7 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2019 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2020 CERN * * This program is free software; you can redistribute it and/or @@ -82,7 +82,7 @@ public: /** * Function Insert() - * Inserts an item into the tree. Item's bounding box is taken via its GetBoundingBox() method. + * Inserts an item into the tree. */ void insert( BOARD_ITEM* aItem, int aWorstClearance = 0, int aLayer = UNDEFINED_LAYER ) { diff --git a/pcbnew/drc/drc_test_provider_copper_clearance.cpp b/pcbnew/drc/drc_test_provider_copper_clearance.cpp index 632860b31f..4e8bef1ef4 100644 --- a/pcbnew/drc/drc_test_provider_copper_clearance.cpp +++ b/pcbnew/drc/drc_test_provider_copper_clearance.cpp @@ -27,7 +27,6 @@ #include #include -#include #include #include #include @@ -144,6 +143,8 @@ bool DRC_TEST_PROVIDER_COPPER_CLEARANCE::Run() size_t count = 0; size_t ii = 0; + m_copperTree.clear(); + auto countItems = [&]( BOARD_ITEM* item ) -> bool { diff --git a/pcbnew/drc/drc_test_provider_hole_clearance.cpp b/pcbnew/drc/drc_test_provider_hole_clearance.cpp index 1dc97f2c82..d1845ba8ff 100644 --- a/pcbnew/drc/drc_test_provider_hole_clearance.cpp +++ b/pcbnew/drc/drc_test_provider_hole_clearance.cpp @@ -117,6 +117,8 @@ bool DRC_TEST_PROVIDER_HOLE_CLEARANCE::Run() size_t count = 0; size_t ii = 0; + m_holeTree.clear(); + auto countItems = [&]( BOARD_ITEM* item ) -> bool {