diff options
author | Robin Gareus <robin@gareus.org> | 2016-07-09 17:42:58 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-07-09 17:42:58 +0200 |
commit | 0d050de94e3ae5a1a0dc36114df1995b042f3b80 (patch) | |
tree | 8775d6393355b551b699819e5ca175d48be051d8 /libs/ardour/session.cc | |
parent | b64a6b658eae14b1dd1eba6113fa88f940fafc42 (diff) |
move latency-recompute into dedicated thread.
this fixes an issue with jack1 and jack_latency_recompute() since must not
send a server request from inside the server callback.
Diffstat (limited to 'libs/ardour/session.cc')
-rw-r--r-- | libs/ardour/session.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index bf8291e4b0..74f20306d2 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -279,6 +279,7 @@ Session::Session (AudioEngine &eng, , _reconnecting_routes_in_progress (false) , _route_deletion_in_progress (false) , destructive_index (0) + , _latency_recompute_pending (0) , _track_number_decimals(1) , default_fade_steepness (0) , default_fade_msecs (0) @@ -3418,6 +3419,7 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool r->output()->changed.connect_same_thread (*this, boost::bind (&Session::set_worst_io_latencies_x, this, _1, _2)); r->processors_changed.connect_same_thread (*this, boost::bind (&Session::route_processors_changed, this, _1)); + r->processor_latency_changed.connect_same_thread (*this, boost::bind (&Session::queue_latency_recompute, this)); if (r->is_master()) { _master_out = r; @@ -6839,6 +6841,16 @@ Session::auto_connect_route (boost::shared_ptr<Route> route, bool connect_inputs } void +Session::queue_latency_recompute () +{ + g_atomic_int_inc (&_latency_recompute_pending); + if (pthread_mutex_trylock (&_auto_connect_mutex) == 0) { + pthread_cond_signal (&_auto_connect_cond); + pthread_mutex_unlock (&_auto_connect_mutex); + } +} + +void Session::auto_connect (const AutoConnectRequest& ar) { boost::shared_ptr<Route> route = ar.route.lock(); @@ -7003,6 +7015,10 @@ Session::auto_connect_thread_run () } } + while (g_atomic_int_and (&_latency_recompute_pending, 0)) { + update_latency_compensation (); + } + pthread_cond_wait (&_auto_connect_cond, &_auto_connect_mutex); } pthread_mutex_unlock (&_auto_connect_mutex); |