diff --git a/0001-Fix-triangulationValid-check-race-for-zone-fill.patch b/0001-Fix-triangulationValid-check-race-for-zone-fill.patch deleted file mode 100644 index c141059..0000000 --- a/0001-Fix-triangulationValid-check-race-for-zone-fill.patch +++ /dev/null @@ -1,133 +0,0 @@ -From 1c459e9a67151a6f028ac3a108b338e850126bfb Mon Sep 17 00:00:00 2001 -From: StefanBruens -Date: Wed, 13 Mar 2024 21:43:12 +0000 -Subject: [PATCH] Fix triangulationValid check race for zone fill - -The m_triangulationValid flag is used in several places without holding -the mutex, thus it should only ever be set when the triangulation is -guaranteed to be valid. - -This can either be done by protecting both data and flag by the same -mutex, or updating the flag only after the triangulation has finished. - -Also fix the case when the triangulation actually fails, the flag should -not be set in this case. - -While at it, simplify the recalculation check. Only if both the -triangulation is valid, and the data hash is unchanged the recalculation -can be skipped - this is typically the case when two threads try to -update the cache concurrently, the second one will block at the mutex, -and will see the valid data after the first thread has finished. - -Fixes #17180 ---- - libs/kimath/include/geometry/shape_poly_set.h | 3 +- - libs/kimath/src/geometry/shape_poly_set.cpp | 38 +++++++++---------- - 2 files changed, 21 insertions(+), 20 deletions(-) - -diff --git a/libs/kimath/include/geometry/shape_poly_set.h b/libs/kimath/include/geometry/shape_poly_set.h -index ac5b2325744..e3d1ac18f35 100644 ---- a/libs/kimath/include/geometry/shape_poly_set.h -+++ b/libs/kimath/include/geometry/shape_poly_set.h -@@ -28,6 +28,7 @@ - #ifndef __SHAPE_POLY_SET_H - #define __SHAPE_POLY_SET_H - -+#include - #include - #include // for deque - #include // for string, stringstream -@@ -1538,7 +1539,7 @@ protected: - std::vector m_polys; - std::vector> m_triangulatedPolys; - -- bool m_triangulationValid = false; -+ std::atomic m_triangulationValid = false; - std::mutex m_triangulationMutex; - - private: -diff --git a/libs/kimath/src/geometry/shape_poly_set.cpp b/libs/kimath/src/geometry/shape_poly_set.cpp -index dacc1e8a07c..da379ad309a 100644 ---- a/libs/kimath/src/geometry/shape_poly_set.cpp -+++ b/libs/kimath/src/geometry/shape_poly_set.cpp -@@ -2883,7 +2883,7 @@ SHAPE_POLY_SET &SHAPE_POLY_SET::operator=( const SHAPE_POLY_SET& aOther ) - } - - m_hash = aOther.m_hash; -- m_triangulationValid = aOther.m_triangulationValid; -+ m_triangulationValid = aOther.m_triangulationValid.load(); - - return *this; - } -@@ -2985,25 +2985,16 @@ void SHAPE_POLY_SET::cacheTriangulation( bool aPartition, bool aSimplify, - std::vector>* aHintData ) - { - std::unique_lock lock( m_triangulationMutex ); -- bool recalculate = !m_hash.IsValid(); -- MD5_HASH hash; -- -- if( !m_triangulationValid ) -- recalculate = true; - -- if( !recalculate ) -+ if( m_triangulationValid && m_hash.IsValid() ) - { -- hash = checksum(); -- -- if( m_hash != hash ) -- { -- m_hash = hash; -- recalculate = true; -- } -+ if( m_hash == checksum() ) -+ return; - } - -- if( !recalculate ) -- return; -+ // Invalidate, in case anything goes wrong below -+ m_triangulationValid = false; -+ m_hash.SetValid( false ); - - auto triangulate = - []( SHAPE_POLY_SET& polySet, int forOutline, -@@ -3054,7 +3045,6 @@ void SHAPE_POLY_SET::cacheTriangulation( bool aPartition, bool aSimplify, - }; - - m_triangulatedPolys.clear(); -- m_triangulationValid = true; - - if( aPartition ) - { -@@ -3081,6 +3071,12 @@ void SHAPE_POLY_SET::cacheTriangulation( bool aPartition, bool aSimplify, - { - wxLogTrace( TRIANGULATE_TRACE, "Failed to triangulate partitioned polygon %d", ii ); - } -+ else -+ { -+ m_hash = checksum(); -+ // Set valid flag only after everything has been updated -+ m_triangulationValid = true; -+ } - } - } - else -@@ -3095,9 +3091,13 @@ void SHAPE_POLY_SET::cacheTriangulation( bool aPartition, bool aSimplify, - { - wxLogTrace( TRIANGULATE_TRACE, "Failed to triangulate polygon" ); - } -+ else -+ { -+ m_hash = checksum(); -+ // Set valid flag only after everything has been updated -+ m_triangulationValid = true; -+ } - } -- -- m_hash = checksum(); - } - - --- -GitLab - diff --git a/fix_zone_fill_race.patch b/fix_zone_fill_race.patch deleted file mode 100644 index b31b9cd..0000000 --- a/fix_zone_fill_race.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 81cb6d0c3fb92dd15f0a0e0d2d32337be1617399 Mon Sep 17 00:00:00 2001 -From: Seth Hillbrand -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 // for deque - #include // for string, stringstream - #include -+#include - #include // for set - #include // for out_of_range - #include // for abs -@@ -1537,7 +1538,8 @@ protected: - std::vector m_polys; - std::vector> 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>* aHintData ) - { -+ std::unique_lock lock( m_triangulationMutex ); - bool recalculate = !m_hash.IsValid(); - MD5_HASH hash; - --- -GitLab - diff --git a/kicad-8.0.1.tar.bz2 b/kicad-8.0.1.tar.bz2 deleted file mode 100644 index 0b291d6..0000000 --- a/kicad-8.0.1.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ea3f18650ce1b5359c685d10245efd95f87fa42ee52a1585bbc22d957617928 -size 72453098 diff --git a/kicad-8.0.2.tar.bz2 b/kicad-8.0.2.tar.bz2 new file mode 100644 index 0000000..4236e4a --- /dev/null +++ b/kicad-8.0.2.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d26964384300a260b7975207a6ac28d393aeb270d1b837f9eadba95ab940465 +size 72713030 diff --git a/kicad.changes b/kicad.changes index 1f71310..b75caa2 100644 --- a/kicad.changes +++ b/kicad.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Mon May 6 13:48:13 UTC 2024 - Stefan Brüns + +- update to 8.0.2: + See https://www.kicad.org/blog/2024/04/KiCad-8.0.2-Release/ for details +- Drop upstream patches: + * fix_zone_fill_race.patch + * 0001-Fix-triangulationValid-check-race-for-zone-fill.patch + * libgit2-1.8.0-compatibility.patch + ------------------------------------------------------------------- Wed Mar 27 16:40:26 UTC 2024 - Stefan Brüns diff --git a/kicad.spec b/kicad.spec index f8dc0ba..293066d 100644 --- a/kicad.spec +++ b/kicad.spec @@ -20,20 +20,14 @@ # symbol libraries from version 8.0.0 %define compatversion 8.0.0 Name: kicad -Version: 8.0.1 -%define file_version 8.0.1 +Version: 8.0.2 +%define file_version 8.0.2 Release: 0 Summary: EDA software suite for the creation of schematics and PCB License: AGPL-3.0-or-later AND GPL-3.0-or-later Group: Productivity/Scientific/Electronics URL: https://www.kicad.org Source: https://gitlab.com/kicad/code/kicad/-/archive/%{file_version}/kicad-%{file_version}.tar.bz2 -# PATCH-FIX-UPSTREAM -Patch1: https://gitlab.com/kicad/code/kicad/-/commit/81cb6d0c3fb92dd15f0a0e0d2d32337be1617399.patch#/fix_zone_fill_race.patch -# PATCH-FIX-UPSTREAM -Patch2: https://gitlab.com/kicad/code/kicad/-/commit/1c459e9a67151a6f028ac3a108b338e850126bfb.patch#/0001-Fix-triangulationValid-check-race-for-zone-fill.patch -# PATCH-FIX-UPSTREAM -Patch3: https://gitlab.com/kicad/code/kicad/-/merge_requests/1882.patch#/libgit2-1.8.0-compatibility.patch BuildRequires: cmake >= 3.16 BuildRequires: fdupes diff --git a/libgit2-1.8.0-compatibility.patch b/libgit2-1.8.0-compatibility.patch deleted file mode 100644 index 022a6cb..0000000 --- a/libgit2-1.8.0-compatibility.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0b2de7b7072b4b7d2fc577170024cd5326396681 Mon Sep 17 00:00:00 2001 -From: Huang Rui -Date: Fri, 22 Mar 2024 18:18:40 +0800 -Subject: [PATCH] libgit2-1.8.0 compatibility: adjusted parent pointer type - -- Adjusted parent pointer type in git_commit_create call for compatibility - with libgit2 1.8.0 and above. -- Included preprocessor checks to maintain support for versions older than - 1.8.0. -- Ensures consistent function behavior across different libgit2 versions. - -Fixes https://gitlab.com/kicad/code/kicad/-/issues/17536 -Signed-off-by: Huang Rui ---- - kicad/project_tree_pane.cpp | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/kicad/project_tree_pane.cpp b/kicad/project_tree_pane.cpp -index 6ac4b04034c..99ad026bc9c 100644 ---- a/kicad/project_tree_pane.cpp -+++ b/kicad/project_tree_pane.cpp -@@ -2233,7 +2233,14 @@ void PROJECT_TREE_PANE::onGitCommit( wxCommandEvent& aEvent ) - } - - git_oid oid; -+ // Check if the libgit2 library version is 1.8.0 or higher -+#if ( LIBGIT2_VER_MAJOR > 1 ) || ( LIBGIT2_VER_MAJOR == 1 && LIBGIT2_VER_MINOR >= 8 ) -+ // For libgit2 version 1.8.0 and above -+ git_commit* const parents[1] = { parent }; -+#else -+ // For libgit2 versions older than 1.8.0 - const git_commit* parents[1] = { parent }; -+#endif - - if( git_commit_create( &oid, repo, "HEAD", author, author, nullptr, commit_msg.mb_str(), tree, - 1, parents ) != 0 ) --- -GitLab -