diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 3fc6054b3e..4b4130aac9 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -1155,8 +1155,20 @@ int AudioEngine::client_real_time_priority () { if (!_backend) { + assert (0); return PBD_RT_PRI_PROC; } + if (!_backend->is_realtime ()) { + /* this is only an issue with the Dummy backend. + * - with JACK, we require rt permissions. + * - with ALSA/Pulseaudio this can only happen if rt permissions + * are n/a. Other atempts to get rt will fail likewise. + * + * perhaps: + * TODO: use is_realtime () ? PBD_SCHED_FIFO : PBD_SCHED_OTHER + */ + return PBD_RT_PRI_PROC; // XXX + } return _backend->client_real_time_priority(); } diff --git a/libs/ardour/automation_watch.cc b/libs/ardour/automation_watch.cc index ea602a29c5..763e63a3aa 100644 --- a/libs/ardour/automation_watch.cc +++ b/libs/ardour/automation_watch.cc @@ -189,7 +189,7 @@ AutomationWatch::timer () void AutomationWatch::thread () { - pbd_set_thread_priority (pthread_self(), PBD_SCHED_FIFO, AudioEngine::instance()->client_real_time_priority() - 3); + pbd_set_thread_priority (pthread_self(), PBD_SCHED_FIFO, AudioEngine::instance()->client_real_time_priority() - 2); pthread_set_name ("AutomationWatch"); while (_run_thread) { Glib::usleep ((gulong) floor (Config->get_automation_interval_msecs() * 1000)); diff --git a/libs/ardour/convolver.cc b/libs/ardour/convolver.cc index 2f94950836..112db53e2b 100644 --- a/libs/ardour/convolver.cc +++ b/libs/ardour/convolver.cc @@ -158,7 +158,7 @@ Convolution::restart () } if (rv == 0) { - rv = _convproc.start_process (pbd_absolute_rt_priority (PBD_SCHED_FIFO, AudioEngine::instance ()->client_real_time_priority () - 2), PBD_SCHED_FIFO); + rv = _convproc.start_process (pbd_absolute_rt_priority (PBD_SCHED_FIFO, AudioEngine::instance ()->client_real_time_priority () - 1), PBD_SCHED_FIFO); } assert (rv == 0); // bail out in debug builds diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index efef182a74..90c2597df6 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -698,7 +698,7 @@ ARDOUR::init_post_engine (uint32_t start_cnt) } } - BaseUI::set_thread_priority (pbd_absolute_rt_priority (PBD_SCHED_FIFO, AudioEngine::instance()->client_real_time_priority () - 3)); + BaseUI::set_thread_priority (pbd_absolute_rt_priority (PBD_SCHED_FIFO, AudioEngine::instance()->client_real_time_priority () - 2)); TransportMasterManager::instance ().restart (); } diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index b103a52621..5d71defc30 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -545,7 +545,7 @@ LV2Plugin::init(const void* c_plugin, samplecnt_t rate) static const int32_t _min_block_length = 1; // may happen during split-cycles static const int32_t _max_block_length = 8192; // max possible (with all engines and during export) static const int32_t rt_policy = PBD_SCHED_FIFO; - static const int32_t rt_priority = pbd_absolute_rt_priority (PBD_SCHED_FIFO, AudioEngine::instance()->client_real_time_priority () - 2); + static const int32_t rt_priority = pbd_absolute_rt_priority (PBD_SCHED_FIFO, AudioEngine::instance()->client_real_time_priority () - 1); /* Consider updating max-block-size whenever the buffersize changes. * It requires re-instantiating the plugin (which is a non-realtime operation), * so it should be done lightly and only for plugins that require it. diff --git a/libs/pbd/pthread_utils.cc b/libs/pbd/pthread_utils.cc index 69f1072148..7226552160 100644 --- a/libs/pbd/pthread_utils.cc +++ b/libs/pbd/pthread_utils.cc @@ -321,6 +321,7 @@ pbd_absolute_rt_priority (int policy, int priority) const int p_max = sched_get_priority_max (policy); // Linux: 99 if (priority == 0) { + assert (0); priority = (p_min + p_max) / 2; } else if (priority > 0) { /* value relative to minium */