From f9903a7a8bbd16d52c73b42431ffa98bab945ee3 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 27 Dec 2021 12:04:39 -0700 Subject: [PATCH] triggerbox: use custom (threaded) deleter for MIDITriggers just like AudioTriggers --- libs/ardour/triggerbox.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libs/ardour/triggerbox.cc b/libs/ardour/triggerbox.cc index 2c69d36f81..aa8d2d57e2 100644 --- a/libs/ardour/triggerbox.cc +++ b/libs/ardour/triggerbox.cc @@ -2740,12 +2740,18 @@ TriggerBox::set_state (const XMLNode& node, int version) for (XMLNodeList::const_iterator t = tchildren.begin(); t != tchildren.end(); ++t) { TriggerPtr trig; + /* Note use of a custom delete function. We cannot + delete the old trigger from the RT context where the + trigger swap will happen, so we will ask the trigger + helper thread to take care of it. + */ + if (_data_type == DataType::AUDIO) { trig.reset (new AudioTrigger (all_triggers.size(), *this), Trigger::request_trigger_delete); all_triggers.push_back (trig); trig->set_state (**t, version); } else if (_data_type == DataType::MIDI) { - trig = boost::make_shared (all_triggers.size(), *this); + trig.reset (new MIDITrigger (all_triggers.size(), *this), Trigger::request_trigger_delete); all_triggers.push_back (trig); trig->set_state (**t, version); }