- {
- Glib::Mutex::Lock em (_session.engine().process_lock());
-
- {
- Glib::Mutex::Lock lm (io_lock);
-
- if (n_inputs() >= _input_maximum) {
- return -1;
- }
-
- /* Create a new input port */
-
- // FIXME: naming scheme for differently typed ports?
- if (_input_maximum.get(type) == 1) {
- snprintf (name, sizeof (name), _("%s/in"), _name.c_str());
- } else {
- snprintf (name, sizeof (name), _("%s/in %u"), _name.c_str(), find_input_port_hole());
- }
-
- if ((our_port = _session.engine().register_input_port (type, name)) == 0) {
- error << string_compose(_("IO: cannot register input port %1"), name) << endmsg;
- return -1;
- }
-
- _inputs.add (our_port);
- drop_input_connection ();
- setup_peak_meters ();
- reset_panner ();
- }
-
- MoreChannels (n_inputs()); /* EMIT SIGNAL */
- }
-
- if (source.length()) {
-
- if (_session.engine().connect (source, our_port->name())) {
- return -1;
- }
- }
-
- // pan_changed (src); /* EMIT SIGNAL */
- input_changed (ConfigurationChanged, src); /* EMIT SIGNAL */
- _session.set_dirty ();
-
- return 0;
-}
-
-int
-IO::disconnect_inputs (void* src)
-{
- {
- Glib::Mutex::Lock em (_session.engine().process_lock());
-
- {
- Glib::Mutex::Lock lm (io_lock);
-
- for (PortSet::iterator i = _inputs.begin(); i != _inputs.end(); ++i) {
- _session.engine().disconnect (*i);
- }
-
- drop_input_connection ();
- }
- }
-
- input_changed (ConnectionsChanged, src); /* EMIT SIGNAL */
-
- return 0;
-}
-
-int
-IO::disconnect_outputs (void* src)
-{
- {
- Glib::Mutex::Lock em (_session.engine().process_lock());
-
- {
- Glib::Mutex::Lock lm (io_lock);
-
- for (PortSet::iterator i = _outputs.begin(); i != _outputs.end(); ++i) {
- _session.engine().disconnect (*i);
- }
-
- drop_output_connection ();
- }
- }
-
- output_changed (ConnectionsChanged, src); /* EMIT SIGNAL */
- _session.set_dirty ();
-
- return 0;
-}
-
-bool
-IO::ensure_inputs_locked (ChanCount count, bool clear, void* src)
-{
- Port* input_port = 0;
- bool changed = false;