summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-02-01 20:03:25 +0000
committerDavid Robillard <d@drobilla.net>2010-02-01 20:03:25 +0000
commit2196bb614e13192abd870262bd7deec2ac29b541 (patch)
tree5a61a1652b4474c50152cde6aae5d58bf3fde5e9 /libs
parentfe0b06bb9be51b98120c2d05c25350d44839068a (diff)
Fix illegal iterator usage.
git-svn-id: svn://localhost/ardour2/branches/3.0@6613 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.cc12
1 files changed, 8 insertions, 4 deletions
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
index db29a4c70a..08c0e7a125 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
@@ -388,12 +388,14 @@ GenericMidiControlProtocol::delete_binding (PBD::Controllable* control)
if (control != 0) {
Glib::Mutex::Lock lm2 (controllables_lock);
- for (MIDIControllables::iterator iter = controllables.begin(); iter != controllables.end(); ++iter) {
+ for (MIDIControllables::iterator iter = controllables.begin(); iter != controllables.end();) {
MIDIControllable* existingBinding = (*iter);
if (control == (existingBinding->get_controllable())) {
delete existingBinding;
- controllables.erase (iter);
+ iter = controllables.erase (iter);
+ } else {
+ ++iter;
}
}
@@ -414,7 +416,7 @@ GenericMidiControlProtocol::create_binding (PBD::Controllable* control, int pos,
// Remove any old binding for this midi channel/type/value pair
// Note: can't use delete_binding() here because we don't know the specific controllable we want to remove, only the midi information
- for (MIDIControllables::iterator iter = controllables.begin(); iter != controllables.end(); ++iter) {
+ for (MIDIControllables::iterator iter = controllables.begin(); iter != controllables.end();) {
MIDIControllable* existingBinding = (*iter);
if ((existingBinding->get_control_channel() & 0xf ) == channel &&
@@ -422,7 +424,9 @@ GenericMidiControlProtocol::create_binding (PBD::Controllable* control, int pos,
(existingBinding->get_control_type() & 0xf0 ) == MIDI::controller) {
delete existingBinding;
- controllables.erase (iter);
+ iter = controllables.erase (iter);
+ } else {
+ ++iter;
}
}