Don't allow to add/remove monitor-section w/o engine
authorRobin Gareus <robin@gareus.org>
Mon, 26 Nov 2018 02:06:22 +0000 (03:06 +0100)
committerRobin Gareus <robin@gareus.org>
Mon, 26 Nov 2018 02:15:14 +0000 (03:15 +0100)
Adding/removing the Monitor section changes port-connections,
a port-engine is needed to establish connections.

Ideally we'd allow this and queue for connection changes. This
will however require deep changes.

Also toggling the monitor-section on/off/on w/o engine can later
result in failure to register ports. Due to lack of engine-signals
not all shared_ptr<> port references are dropped.

libs/ardour/session.cc

index ad2f04af61fd620c054269f0bc04cee025e0c2c9..ae354646b97885b414437c4a34ee621ff107efd5 100644 (file)
@@ -1161,6 +1161,12 @@ Session::remove_monitor_section ()
                return;
        }
 
+       /* allow deletion when session is unloaded */
+       if (!_engine.running() && !(_state_of_the_state & Deletion)) {
+               error << _("Cannot remove monitor section while the engine is offline.") << endmsg;
+               return;
+       }
+
        /* force reversion to Solo-In-Place */
        Config->set_solo_control_is_listen_control (false);
 
@@ -1217,6 +1223,11 @@ Session::add_monitor_section ()
 {
        RouteList rl;
 
+       if (!_engine.running()) {
+               error << _("Cannot create monitor section while the engine is offline.") << endmsg;
+               return;
+       }
+
        if (_monitor_out || !_master_out || Profile->get_trx()) {
                return;
        }