From 7a2fef70490f4f212c6ce2fe3b51a2724b183366 Mon Sep 17 00:00:00 2001 From: Joe Neeman Date: Sun, 18 May 2008 11:06:24 +1000 Subject: [PATCH] Fix 619. Ensure that the sorting function used to find the outside-staff-priority grobs doesn't modify its arguments. --- lily/axis-group-interface.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 044a392851..efed220b25 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -579,6 +579,15 @@ add_grobs_of_one_priority (Skyline_pair *const skylines, Skyline_pair Axis_group_interface::skyline_spacing (Grob *me, vector elements) { + /* For grobs with an outside-staff-priority, the sorting function might + call extent and cause suicide. This breaks the contract that is required + for the STL sort function. To avoid this, we make sure that any suicides + are triggered beforehand. + */ + for (vsize i = 0; i < elements.size (); i++) + if (scm_is_number (elements[i]->get_property ("outside-staff-priority"))) + elements[i]->extent (elements[i], X_AXIS); + vector_sort (elements, staff_priority_less); Grob *x_common = common_refpoint_of_array (elements, me, X_AXIS); Grob *y_common = common_refpoint_of_array (elements, me, Y_AXIS); -- 2.39.5