summaryrefslogtreecommitdiff
path: root/libs/ardour/plugin_insert.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-16 12:43:56 +0200
committerRobin Gareus <robin@gareus.org>2016-04-16 12:43:56 +0200
commit8f367ddaa08558418c29a58d1d34f76a65773d1c (patch)
tree71218191d8235d5b1385daf800626901cca68201 /libs/ardour/plugin_insert.cc
parent277893b130f5ec1efa4aba44d92f038dad2793ef (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.cc13
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) {