Replace control list locks with RWLocks 4.0-rc4
authorRobin Gareus <robin@gareus.org>
Wed, 15 Apr 2015 16:13:56 +0000 (18:13 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 15 Apr 2015 16:13:56 +0000 (18:13 +0200)
commit96ce9c304e0a3e4a6b9882bbf1b831fbeaca6f11
treeb8b20f36a0c0fefd0cd19137213119cdf016be21
parent9391da0c24000ac479adc00a04a7ad7e197f2049
Replace control list locks with RWLocks

towards fixing #6238 and #6096.

GUI thread:
#2  Glib::Threads::Mutex::Lock::Lock
#3  Evoral::ControlList::eval
#4  Evoral::Control::get_double
#5  ARDOUR::AutomationControl::get_value
#6  ProcessorEntry::Control::control_changed
..
#15 PBD::Timer::timeout_handler

at the same time: Audio Thread (try-lock, fails)

#0  Evoral::Curve::rt_safe_get_vector
#1  ARDOUR::Amp::setup_gain_automation
#2  ARDOUR::Route::process_output_buffers

Due to the failed try-lock.. AMP::_apply_gain_automation
is false. and Amp::run() uses a different gain factor.
-> click.
libs/evoral/evoral/ControlList.hpp
libs/evoral/src/ControlList.cpp
libs/evoral/src/Curve.cpp