From 901f8caf22b172db674579257744e25891fd1b83 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 18 Jul 2016 23:51:10 +0200 Subject: [PATCH] add a plugin-death connection at application exit, there may otherwise be a race condition, queue draw could be scheduled for a widget that's no longer present. --- gtk2_ardour/processor_box.cc | 1 + gtk2_ardour/processor_box.h | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index c01d9e497c..4ba27f10a6 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -1518,6 +1518,7 @@ ProcessorEntry::PluginDisplay::PluginDisplay (ProcessorEntry& e, boost::shared_p { set_name ("processor prefader"); add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); + _plug->DropReferences.connect (_death_connection, invalidator (*this), boost::bind (&PluginDisplay::plugin_going_away, this), gui_context()); _plug->QueueDraw.connect (_qdraw_connection, invalidator (*this), boost::bind (&Gtk::Widget::queue_draw, this), gui_context ()); diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 27c529980f..5dd7483be4 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -250,12 +250,17 @@ private: bool on_button_press_event (GdkEventButton *ev); bool on_button_release_event (GdkEventButton *ev); + void plugin_going_away () { + _qdraw_connection.disconnect (); + } + void update_height_alloc (uint32_t inline_height); virtual uint32_t render_inline (cairo_t *, uint32_t width); ProcessorEntry& _entry; boost::shared_ptr _plug; PBD::ScopedConnection _qdraw_connection; + PBD::ScopedConnection _death_connection; cairo_surface_t* _surf; uint32_t _max_height; uint32_t _cur_height; -- 2.30.2