diff options
Diffstat (limited to 'libs/ardour/io.cc')
-rw-r--r-- | libs/ardour/io.cc | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index be03df7926..c90e9017e1 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -1063,13 +1063,14 @@ IO::disconnect_outputs (void* src) return 0; } -bool -IO::ensure_inputs_locked (uint32_t n, bool clear, void* src) +int +IO::ensure_inputs_locked (uint32_t n, bool clear, void* src, bool& changed) { Port* input_port; - bool changed = false; bool reduced = false; + changed = false; + /* remove unused ports */ while (_ninputs > n) { @@ -1125,7 +1126,7 @@ IO::ensure_inputs_locked (uint32_t n, bool clear, void* src) } } - return changed; + return 0; } int @@ -1286,9 +1287,13 @@ IO::ensure_inputs (uint32_t n, bool clear, bool lockit, void* src) if (lockit) { BLOCK_PROCESS_CALLBACK (); Glib::Mutex::Lock im (io_lock); - changed = ensure_inputs_locked (n, clear, src); + if (ensure_inputs_locked (n, clear, src, changed)) { + return -1; + } } else { - changed = ensure_inputs_locked (n, clear, src); + if (ensure_inputs_locked (n, clear, src, changed)) { + return -1; + } } if (changed) { @@ -1299,14 +1304,15 @@ IO::ensure_inputs (uint32_t n, bool clear, bool lockit, void* src) return 0; } -bool -IO::ensure_outputs_locked (uint32_t n, bool clear, void* src) +int +IO::ensure_outputs_locked (uint32_t n, bool clear, void* src, bool& changed) { Port* output_port; - bool changed = false; bool reduced = false; bool need_pan_reset; + changed = false; + if (_noutputs == n) { need_pan_reset = false; } else { @@ -1362,7 +1368,7 @@ IO::ensure_outputs_locked (uint32_t n, bool clear, void* src) } } - return changed; + return 0; } int @@ -1373,7 +1379,7 @@ IO::ensure_outputs (uint32_t n, bool clear, bool lockit, void* src) if (_output_maximum >= 0) { n = min (_output_maximum, (int) n); if (n == _noutputs && !clear) { - return 0; + return -1; } } @@ -1382,9 +1388,13 @@ IO::ensure_outputs (uint32_t n, bool clear, bool lockit, void* src) if (lockit) { BLOCK_PROCESS_CALLBACK (); Glib::Mutex::Lock im (io_lock); - changed = ensure_outputs_locked (n, clear, src); + if (ensure_outputs_locked (n, clear, src, changed)) { + return -1; + } } else { - changed = ensure_outputs_locked (n, clear, src); + if (ensure_outputs_locked (n, clear, src, changed)) { + return -1; + } } if (changed) { |