summaryrefslogtreecommitdiff
path: root/gtk2_ardour/track_selection.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-06-30 11:02:23 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-06-30 11:02:23 -0400
commit1f695014b49da3748c253f7d982978b5cfdf4cec (patch)
tree07b640730605bf8f41509921fb6b898ad379e819 /gtk2_ardour/track_selection.h
parent890ea91920f7e3e233dab966b0516d3d0e3d3378 (diff)
protect use of iterators across routeUI selection when operations change the selection (e.g. deletion)
Diffstat (limited to 'gtk2_ardour/track_selection.h')
-rw-r--r--gtk2_ardour/track_selection.h21
1 files changed, 17 insertions, 4 deletions
diff --git a/gtk2_ardour/track_selection.h b/gtk2_ardour/track_selection.h
index d94ec3c8c1..2e9927ab42 100644
--- a/gtk2_ardour/track_selection.h
+++ b/gtk2_ardour/track_selection.h
@@ -46,41 +46,54 @@ public:
template <typename Function>
void foreach_route_ui (Function f) {
- for (iterator i = begin(); i != end(); ++i) {
+ for (iterator i = begin(); i != end(); ) {
+ iterator tmp = i;
+ ++tmp;
+
RouteUI* t = dynamic_cast<RouteUI*> (*i);
if (t) {
f (t);
}
+ i = tmp;
}
}
template <typename Function>
void foreach_route_time_axis (Function f) {
- for (iterator i = begin(); i != end(); ++i) {
+ for (iterator i = begin(); i != end(); ) {
+ iterator tmp = i;
+ ++tmp;
RouteTimeAxisView* t = dynamic_cast<RouteTimeAxisView*> (*i);
if (t) {
f (t);
}
+ i = tmp;
}
}
template <typename Function>
void foreach_audio_time_axis (Function f) {
- for (iterator i = begin(); i != end(); ++i) {
+ for (iterator i = begin(); i != end(); ) {
+ iterator tmp = i;
+ ++tmp;
AudioTimeAxisView* t = dynamic_cast<AudioTimeAxisView*> (*i);
if (t) {
f (t);
}
+ i = tmp;
}
}
template <typename Function>
void foreach_midi_time_axis (Function f) {
- for (iterator i = begin(); i != end(); ++i) {
+ for (iterator i = begin(); i != end(); ) {
+ iterator tmp = i;
+ ++tmp;
MidiTimeAxisView* t = dynamic_cast<MidiTimeAxisView*> (*i);
if (t) {
f (t);
}
+ i = tmp;
}
}