Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.0:Staging:FactoryCandidates
kicad
fix_zone_fill_race.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File fix_zone_fill_race.patch of Package kicad
From 81cb6d0c3fb92dd15f0a0e0d2d32337be1617399 Mon Sep 17 00:00:00 2001 From: Seth Hillbrand <seth@kipro-pcb.com> Date: Wed, 13 Mar 2024 10:33:43 -0700 Subject: [PATCH] Fix race condition in zone fill When checking collisions, the SHAPE_POLY_SET::Collide() routine is not const because it will regenerate the triangulation cache if it is out of date (using a const_cast, grrr). This sidesteps the issue by assigning a mutex to the triangulation caching Fixes https://gitlab.com/kicad/code/kicad/-/issues/17180 --- libs/kimath/include/geometry/shape_poly_set.h | 4 +++- libs/kimath/src/geometry/shape_poly_set.cpp | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/kimath/include/geometry/shape_poly_set.h b/libs/kimath/include/geometry/shape_poly_set.h index 9ba7b5407b0..ac5b2325744 100644 --- a/libs/kimath/include/geometry/shape_poly_set.h +++ b/libs/kimath/include/geometry/shape_poly_set.h @@ -32,6 +32,7 @@ #include <deque> // for deque #include <iosfwd> // for string, stringstream #include <memory> +#include <mutex> #include <set> // for set #include <stdexcept> // for out_of_range #include <stdlib.h> // for abs @@ -1537,7 +1538,8 @@ protected: std::vector<POLYGON> m_polys; std::vector<std::unique_ptr<TRIANGULATED_POLYGON>> m_triangulatedPolys; - bool m_triangulationValid = false; + bool m_triangulationValid = false; + std::mutex m_triangulationMutex; private: MD5_HASH m_hash; diff --git a/libs/kimath/src/geometry/shape_poly_set.cpp b/libs/kimath/src/geometry/shape_poly_set.cpp index 407c43b9c6e..dacc1e8a07c 100644 --- a/libs/kimath/src/geometry/shape_poly_set.cpp +++ b/libs/kimath/src/geometry/shape_poly_set.cpp @@ -2984,6 +2984,7 @@ static SHAPE_POLY_SET partitionPolyIntoRegularCellGrid( const SHAPE_POLY_SET& aP void SHAPE_POLY_SET::cacheTriangulation( bool aPartition, bool aSimplify, std::vector<std::unique_ptr<TRIANGULATED_POLYGON>>* aHintData ) { + std::unique_lock<std::mutex> lock( m_triangulationMutex ); bool recalculate = !m_hash.IsValid(); MD5_HASH hash; -- GitLab
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor