fix ‘pure virtual’ crash at exit.
Finally tracked down.
AudioEngine::instance()->Halted.connect_same_thread() .. call_slot().
Since the calling thread has (eg JACK) has no event loop: crash
__cxa_pure_virtual + 18
PBD::EventLoop::invalidate_request(void*) + 61 (event_loop.cc:71)
sigc::trackable::notify_callbacks() + 63
BaseUI::~BaseUI() + 173 (base_ui.cc:64)
AbstractUI<Gtkmm2ext::UIRequest>::~AbstractUI() + 137 (abstract_ui.h:59)
Gtkmm2ext::UI::~UI() + 279 (gtk_ui.cc:131)
ARDOUR_UI::~ARDOUR_UI() + 3556
ARDOUR_UI::~ARDOUR_UI() + 21
ARDOUR_UI::~ARDOUR_UI() + 25
main + 2396
at event_loop.cc:71
Glib::Threads::Mutex::Lock lm (ir->event_loop->slot_invalidation_mutex());
print *ir->event_loop
(PBD::EventLoop) $1 = {}
see http://pastebin.com/zvWJbqwf for a call_slot call on OSX/Coreaudio.
This commit is contained in:
@@ -439,7 +439,7 @@ ARDOUR_UI::engine_halted (const char* reason, bool free_reason)
|
||||
free it later.
|
||||
*/
|
||||
char *copy = strdup (reason);
|
||||
Gtkmm2ext::UI::instance()->call_slot (invalidator (*this), boost::bind (&ARDOUR_UI::engine_halted, this, copy, true));
|
||||
Gtkmm2ext::UI::instance()->call_slot (MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::engine_halted, this, copy, true));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user