+ {
+ if (!run_always)
+ had_good = true;
+ proc = SCM_CDRLOC (*proc);
+ }
+ }
+ // If there were non-run-always iterators and all of them died, take
+ // the rest of the run-always iterators along with them. They have
+ // likely lost their reference iterators. Basing this on the actual
+ // music contexts is not reliable since something like
+ // \new Voice = blah {
+ // << \context Voice = blah { c4 d }
+ // \addlyrics { oh no }
+ // >> e f
+ // }
+ // cannot wait for the death of context blah before ending the
+ // simultaneous iterator.
+ if (had_bad && !had_good)
+ {
+ for (SCM p = children_list_; scm_is_pair (p); p = scm_cdr (p))
+ Music_iterator::unsmob (scm_car (p))->quit ();
+ children_list_ = SCM_EOL;