From 8f367ddaa08558418c29a58d1d34f76a65773d1c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 16 Apr 2016 12:43:56 +0200 Subject: [PATCH] Remove dangling plugin thru-connections fixes crash when removing a thru-connected output --- libs/ardour/plugin_insert.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 646bf5e63a..740fa52506 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -1172,7 +1172,7 @@ PluginInsert::sanitize_maps () /* strip dead wood */ PinMappings new_ins; PinMappings new_outs; - ChanMapping new_thru (_thru_map); + ChanMapping new_thru; for (uint32_t pc = 0; pc < get_count(); ++pc) { ChanMapping new_in; @@ -1216,6 +1216,17 @@ PluginInsert::sanitize_maps () } } + /* remove excess thru */ + for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) { + for (uint32_t o = 0; o < _configured_out.get (*t); ++o) { + bool valid; + uint32_t idx = _thru_map.get (*t, o, &valid); + if (valid && idx < _configured_internal.get (*t)) { + new_thru.set (*t, o, idx); + } + } + } + /* prevent out + thru, existing plugin outputs override thru */ for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) { for (uint32_t o = 0; o < _configured_out.get (*t); ++o) {