From 49b7a468052951cfb46a4205c02007ac62f0141d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 24 Dec 2014 16:54:38 -0500 Subject: Fix potential memory errors with note player. Seems unlikely, but if the event firing stuff is off, it could trigger the issue (#5502) and/or a possible memory leak. --- gtk2_ardour/midi_region_view.cc | 29 +++++------------------------ gtk2_ardour/midi_region_view.h | 2 +- 2 files changed, 6 insertions(+), 25 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 45de3ff353..d46aa1b6b6 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -122,7 +122,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent, , _last_event_y (0) , _grabbed_keyboard (false) , _entered (false) - , _note_player (0) { CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name())); _note_group->raise_to_top(); @@ -168,7 +167,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent, , _last_event_y (0) , _grabbed_keyboard (false) , _entered (false) - , _note_player (0) { CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name())); _note_group->raise_to_top(); @@ -219,7 +217,6 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other) , _last_event_y (0) , _grabbed_keyboard (false) , _entered (false) - , _note_player (0) { init (false); } @@ -249,7 +246,6 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptrbutton); - delete _note_player; - _note_player = 0; + _note_player.reset(); return r; case GDK_MOTION_NOTIFY: @@ -1575,20 +1570,8 @@ MidiRegionView::play_midi_note(boost::shared_ptr note) void MidiRegionView::start_playing_midi_note(boost::shared_ptr note) { - if (_no_sound_notes || !ARDOUR_UI::config()->get_sound_midi_notes()) { - return; - } - - RouteUI* route_ui = dynamic_cast (&trackview); - - if (!route_ui || !route_ui->midi_track()) { - return; - } - - delete _note_player; - _note_player = new NotePlayer (route_ui->midi_track ()); - _note_player->add (note); - _note_player->on (); + const std::vector< boost::shared_ptr > notes(1, note); + start_playing_midi_chord(notes); } void @@ -1604,8 +1587,7 @@ MidiRegionView::start_playing_midi_chord (vector > n return; } - delete _note_player; - _note_player = new NotePlayer (route_ui->midi_track()); + _note_player = boost::shared_ptr(new NotePlayer(route_ui->midi_track())); for (vector >::iterator n = notes.begin(); n != notes.end(); ++n) { _note_player->add (*n); @@ -3887,8 +3869,7 @@ MidiRegionView::selection_cleared (MidiRegionView* rv) void MidiRegionView::note_button_release () { - delete _note_player; - _note_player = 0; + _note_player.reset(); } ChannelMode diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 3cca6b9b81..c3ffbd7e1d 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -499,7 +499,7 @@ private: boost::shared_ptr _press_cursor_ctx; - NotePlayer* _note_player; + boost::shared_ptr _note_player; ARDOUR::ChannelMode get_channel_mode() const; uint16_t get_selected_channels () const; -- cgit v1.2.3