Don't use trylock in assertions on windows as it will fail
[ardour.git] / libs / ardour / route.cc
index e84e8b6d939b089886c53c639cf527365210eade..c6f588a79cfb120a02675896a5739310bb4fa4dd 100644 (file)
@@ -83,6 +83,7 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
        , _flags (flg)
        , _pending_declick (true)
        , _meter_point (MeterPostFader)
+       , _meter_type (MeterPeak)
        , _self_solo (false)
        , _soloed_by_others_upstream (0)
        , _soloed_by_others_downstream (0)
@@ -1611,7 +1612,9 @@ Route::reset_instrument_info ()
 int
 Route::configure_processors (ProcessorStreams* err)
 {
+#ifndef WIN32
        assert (!AudioEngine::instance()->process_lock().trylock());
+#endif
 
        if (!_in_configure_processors) {
                Glib::Threads::RWLock::WriterLock lm (_processor_lock);
@@ -1681,7 +1684,9 @@ Route::try_configure_processors_unlocked (ChanCount in, ProcessorStreams* err)
 int
 Route::configure_processors_unlocked (ProcessorStreams* err)
 {
+#ifndef WIN32
        assert (!AudioEngine::instance()->process_lock().trylock());
+#endif
 
        if (_in_configure_processors) {
                return 0;
@@ -1878,6 +1883,8 @@ Route::state(bool full_state)
        node->add_property("denormal-protection", _denormal_protection?"yes":"no");
        node->add_property("meter-point", enum_2_string (_meter_point));
 
+       node->add_property("meter-type", enum_2_string (_meter_type));
+
        if (_route_group) {
                node->add_property("route-group", _route_group->name());
        }
@@ -2052,6 +2059,10 @@ Route::set_state (const XMLNode& node, int version)
                }
        }
 
+       if ((prop = node.property (X_("meter-type"))) != 0) {
+               _meter_type = MeterType (string_2_enum (prop->value (), _meter_type));
+       }
+
        set_processor_state (processor_state);
 
        // this looks up the internal instrument in processors
@@ -2949,6 +2960,8 @@ Route::output_change_handler (IOChange change, void * /*src*/)
                   contains ConfigurationChanged 
                */
                need_to_queue_solo_change = false;
+               configure_processors (0);
+               io_changed (); /* EMIT SIGNAL */
        }
 
        if (!_output->connected() && _soloed_by_others_downstream) {