diff options
author | David Robillard <d@drobilla.net> | 2010-02-01 20:03:25 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-01 20:03:25 +0000 |
commit | 2196bb614e13192abd870262bd7deec2ac29b541 (patch) | |
tree | 5a61a1652b4474c50152cde6aae5d58bf3fde5e9 /libs | |
parent | fe0b06bb9be51b98120c2d05c25350d44839068a (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.cc | 12 |
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; } } |