From cd13af59f4c878e0a172478534eeaa1884aed38d Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Tue, 26 Oct 2021 16:21:01 +0200 Subject: [PATCH] Follow-up to 79eb59b9f23c281125dbd0dd989b979fe171a401 Fix of #7168: Crash when layer count exceeds 4095 This time the crash was fixed for top / bottom propagation of multi-material segmentation. --- src/libslic3r/TriangleMeshSlicer.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/TriangleMeshSlicer.cpp b/src/libslic3r/TriangleMeshSlicer.cpp index 5be86de99b..e61128c64f 100644 --- a/src/libslic3r/TriangleMeshSlicer.cpp +++ b/src/libslic3r/TriangleMeshSlicer.cpp @@ -332,7 +332,7 @@ void slice_facet_at_zs( if (min_z != max_z && slice_facet(*it, vertices, indices, edge_ids, idx_vertex_lowest, false, il) == FacetSliceType::Slicing) { assert(il.edge_type != IntersectionLine::FacetEdgeType::Horizontal); size_t slice_id = it - zs.begin(); - boost::lock_guard l(lines_mutex[slice_id % 64]); + boost::lock_guard l(lines_mutex[slice_id % lines_mutex.size()]); lines[slice_id].emplace_back(il); } } @@ -446,7 +446,7 @@ void slice_facet_with_slabs( auto emit_slab_edge = [&lines, &lines_mutex](IntersectionLine il, size_t slab_id, bool reverse) { if (reverse) il.reverse(); - boost::lock_guard l(lines_mutex[(slab_id + 32) >> 6]); + boost::lock_guard l(lines_mutex[(slab_id + lines_mutex.size() / 2) % lines_mutex.size()]); lines.between_slices[slab_id].emplace_back(il); }; @@ -472,7 +472,7 @@ void slice_facet_with_slabs( }; // Don't flip the FacetEdgeType::Top edge, it will be flipped when chaining. // if (! ProjectionFromTop) il.reverse(); - boost::lock_guard l(lines_mutex[line_id >> 6]); + boost::lock_guard l(lines_mutex[line_id % lines_mutex.size()]); lines.at_slice[line_id].emplace_back(il); } } else { @@ -582,7 +582,7 @@ void slice_facet_with_slabs( if (! ProjectionFromTop) il.reverse(); size_t line_id = it - zs.begin(); - boost::lock_guard l(lines_mutex[line_id >> 6]); + boost::lock_guard l(lines_mutex[line_id % lines_mutex.size()]); lines.at_slice[line_id].emplace_back(il); } }