From 2196bb614e13192abd870262bd7deec2ac29b541 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 1 Feb 2010 20:03:25 +0000 Subject: [PATCH] Fix illegal iterator usage. git-svn-id: svn://localhost/ardour2/branches/3.0@6613 d708f5d6-7413-0410-9779-e7cbd77b26cf --- .../generic_midi/generic_midi_control_protocol.cc | 12 ++++++++---- 1 file 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; } }