From ada601251889c2344a4a89c269cc85877eeb9ebc Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 21 Jul 2022 12:13:25 -0500 Subject: [PATCH] Fix T99854: Crash converting legacy NURBS curves to new type Creating the attributes was done inside a parallel loop. Also correct a typo for the parallel grain size, which was meant to be a power of two. --- .../blenkernel/intern/curve_legacy_convert.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/blender/blenkernel/intern/curve_legacy_convert.cc b/source/blender/blenkernel/intern/curve_legacy_convert.cc index ff5bbc32afe..5c62f292832 100644 --- a/source/blender/blenkernel/intern/curve_legacy_convert.cc +++ b/source/blender/blenkernel/intern/curve_legacy_convert.cc @@ -115,7 +115,7 @@ Curves *curve_legacy_to_curves(const Curve &curve_legacy, const ListBase &nurbs_ MutableSpan tilts = curves.tilt_for_write(); auto create_poly = [&](IndexMask selection) { - threading::parallel_for(selection.index_range(), 246, [&](IndexRange range) { + threading::parallel_for(selection.index_range(), 256, [&](IndexRange range) { for (const int curve_i : selection.slice(range)) { const Nurb &src_curve = *src_curves[curve_i]; const Span src_points(src_curve.bp, src_curve.pntsu); @@ -142,7 +142,7 @@ Curves *curve_legacy_to_curves(const Curve &curve_legacy, const ListBase &nurbs_ MutableSpan handle_types_l = curves.handle_types_left_for_write(); MutableSpan handle_types_r = curves.handle_types_right_for_write(); - threading::parallel_for(selection.index_range(), 246, [&](IndexRange range) { + threading::parallel_for(selection.index_range(), 256, [&](IndexRange range) { for (const int curve_i : selection.slice(range)) { const Nurb &src_curve = *src_curves[curve_i]; const Span src_points(src_curve.bezt, src_curve.pntsu); @@ -165,12 +165,12 @@ Curves *curve_legacy_to_curves(const Curve &curve_legacy, const ListBase &nurbs_ }; auto create_nurbs = [&](IndexMask selection) { - threading::parallel_for(selection.index_range(), 246, [&](IndexRange range) { - MutableSpan resolutions = curves.resolution_for_write(); - MutableSpan nurbs_weights = curves.nurbs_weights_for_write(); - MutableSpan nurbs_orders = curves.nurbs_orders_for_write(); - MutableSpan nurbs_knots_modes = curves.nurbs_knots_modes_for_write(); - + MutableSpan resolutions = curves.resolution_for_write(); + MutableSpan nurbs_weights = curves.nurbs_weights_for_write(); + MutableSpan nurbs_orders = curves.nurbs_orders_for_write(); + MutableSpan nurbs_knots_modes = curves.nurbs_knots_modes_for_write(); + + threading::parallel_for(selection.index_range(), 256, [&](IndexRange range) { for (const int curve_i : selection.slice(range)) { const Nurb &src_curve = *src_curves[curve_i]; const Span src_points(src_curve.bp, src_curve.pntsu);