diff options
author | Greg Zharun <grygoriiz@wavesglobal.com> | 2015-03-01 14:49:36 +0200 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-03-31 17:29:41 -0400 |
commit | 23214f6e6156660e6f966ec78bd6c13b876497bc (patch) | |
tree | 486165c1f53797da00bab329615ca266feed150d /libs/ardour/audioengine.cc | |
parent | 3f5bf264c3841051a914adacc919617dbb651468 (diff) |
[Summary] Fixed several backend issues: made reset counter check atomic, removed copy/paste mistakes
Conflicts:
libs/ardour/audioengine.cc
libs/ardour/engine_state_controller.cc
libs/backends/wavesaudio/waves_audiobackend.cc
Diffstat (limited to 'libs/ardour/audioengine.cc')
-rw-r--r-- | libs/ardour/audioengine.cc | 47 |
1 files changed, 23 insertions, 24 deletions
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 6d854a80a5..452403e485 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -403,52 +403,51 @@ AudioEngine::backend_reset_requested() void AudioEngine::do_reset_backend() { - SessionEvent::create_per_thread_pool (X_("Backend reset processing thread"), 512); + SessionEvent::create_per_thread_pool (X_("Backend reset processing thread"), 512); - Glib::Threads::Mutex::Lock guard (_reset_request_lock); + Glib::Threads::Mutex::Lock guard (_reset_request_lock); - while (!_stop_hw_reset_processing) { + while (!_stop_hw_reset_processing) { - if (_hw_reset_request_count && _backend) { - + if (g_atomic_int_get (&_hw_reset_request_count) != 0 && _backend) { + _reset_request_lock.unlock(); - + Glib::Threads::RecMutex::Lock pl (_state_lock); - g_atomic_int_dec_and_test (&_hw_reset_request_count); - - std::cout << "AudioEngine::RESET::Reset request processing" << std::endl; - - // backup the device name - std::string name = _backend->device_name (); - + g_atomic_int_dec_and_test (&_hw_reset_request_count); + + std::cout << "AudioEngine::RESET::Reset request processing. Requests left: " << _hw_reset_request_count << std::endl; + DeviceResetStarted(); // notify about device reset to be started + + // backup the device name + std::string name = _backend->device_name (); + std::cout << "AudioEngine::RESET::Stoping engine..." << std::endl; stop(); - + std::cout << "AudioEngine::RESET::Reseting device..." << std::endl; if ( 0 == _backend->reset_device () ) { - + std::cout << "AudioEngine::RESET::Starting engine..." << std::endl; start (); - + // inform about possible changes BufferSizeChanged (_backend->buffer_size() ); } else { DeviceError(); } - + std::cout << "AudioEngine::RESET::Done." << std::endl; - _reset_request_lock.lock(); + _reset_request_lock.lock(); - } else { + } else { - _hw_reset_condition.wait (_reset_request_lock); + _hw_reset_condition.wait (_reset_request_lock); - } - } + } + } } - - void AudioEngine::request_device_list_update() { |