Comment #58 on issue 2801 by [email protected]: Patch: Approximates cross-staff slurs in VerticalAxisGroup vertical-skylines.
http://code.google.com/p/lilypond/issues/detail?id=2801

I think I've found the nature of the problem. I did a run of the regtests with a bunch of messages printed to std:err and it looks like every time there is a divergence, the order in which the grobs are read changes. This comes from sorting grobs by pointers and then running ::uniq. In theory this shouldn't matter, but in practice...

1) LilyPond requests pure height from grob X.
2) Grob X's pure height is somehow dependent on grob Y.
3) Depending on how a vector has been pointer-sorted...
3a) Grob Y's actual offset has not yet been calculated because of the way a given vector is sorted, in which is pure offset is returned. 3b) Grob Y's actual offset has been calculated because it was triggered first and stashed in dim_cache_. Grob::pure_relative_y_coordinate will always return this as opposed to the pure value.

So there you have it. One way to solve this may be to disallow Grob::pure_relative_y_coordinate from ever returning something out of dim_cache_. This has no bearing on the caching in item.cc, so it shouldn't result in too much of a slow-down. I'll run regtests on a patch doing this...


Reply via email to