Avoid calling rt-methods from non-rt context
Since upcoming state-machine transitions are done in rt-context via ARDOUR::Session::process_event () they should all in rt-context. set_session() is called from the UI thread (and the process-lock wasn't even taken)
This commit is contained in:
parent
e545e66911
commit
09fd380948
@ -307,6 +307,7 @@ class LIBARDOUR_API AudioEngine : public PortManager, public SessionHandlePtr
|
||||
Glib::Threads::Mutex _devicelist_update_lock;
|
||||
gint _stop_hw_devicelist_processing;
|
||||
uint32_t _start_cnt;
|
||||
uint32_t _init_countdown;
|
||||
|
||||
void start_hw_event_processing();
|
||||
void stop_hw_event_processing();
|
||||
|
@ -100,6 +100,7 @@ AudioEngine::AudioEngine ()
|
||||
, _hw_devicelist_update_count(0)
|
||||
, _stop_hw_devicelist_processing(0)
|
||||
, _start_cnt (0)
|
||||
, _init_countdown (0)
|
||||
#ifdef SILENCE_AFTER_SECONDS
|
||||
, _silence_countdown (0)
|
||||
, _silence_hit_cnt (0)
|
||||
@ -248,6 +249,16 @@ AudioEngine::process_callback (pframes_t nframes)
|
||||
thread_init_callback (NULL);
|
||||
}
|
||||
|
||||
if (_session && _init_countdown > 0) {
|
||||
--_init_countdown;
|
||||
/* Warm up caches */
|
||||
PortManager::cycle_start (nframes);
|
||||
PortManager::silence (nframes);
|
||||
_session->process (nframes);
|
||||
PortManager::cycle_end (nframes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool return_after_remove_check = false;
|
||||
|
||||
if (_measuring_latency == MeasureAudio && _mtdm) {
|
||||
@ -643,21 +654,7 @@ AudioEngine::set_session (Session *s)
|
||||
SessionHandlePtr::set_session (s);
|
||||
|
||||
if (_session) {
|
||||
|
||||
pframes_t blocksize = samples_per_cycle ();
|
||||
|
||||
PortManager::cycle_start (blocksize);
|
||||
|
||||
_session->process (blocksize);
|
||||
_session->process (blocksize);
|
||||
_session->process (blocksize);
|
||||
_session->process (blocksize);
|
||||
_session->process (blocksize);
|
||||
_session->process (blocksize);
|
||||
_session->process (blocksize);
|
||||
_session->process (blocksize);
|
||||
|
||||
PortManager::cycle_end (blocksize);
|
||||
_init_countdown = 8;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user