diff options
author | Robin Gareus <robin@gareus.org> | 2016-04-16 12:43:56 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-04-16 12:43:56 +0200 |
commit | 8f367ddaa08558418c29a58d1d34f76a65773d1c (patch) | |
tree | 71218191d8235d5b1385daf800626901cca68201 /libs/ardour/plugin_insert.cc | |
parent | 277893b130f5ec1efa4aba44d92f038dad2793ef (diff) |
Remove dangling plugin thru-connections
fixes crash when removing a thru-connected output
Diffstat (limited to 'libs/ardour/plugin_insert.cc')
-rw-r--r-- | libs/ardour/plugin_insert.cc | 13 |
1 files changed, 12 insertions, 1 deletions
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) { |