diff options
author | Robin Gareus <robin@gareus.org> | 2014-06-06 20:37:00 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-06-07 17:28:46 +0200 |
commit | c452cd9be2f2fcbe25c6df99e0e0d639b9edf197 (patch) | |
tree | d9edaea0f3b4b2e8da24d1c345253168bbae4230 /libs | |
parent | b68d2e25b246061b11e7576265241005a73cbbd0 (diff) |
ALSA rt-thread priority fixes
Diffstat (limited to 'libs')
-rw-r--r-- | libs/backends/alsa/alsa_audiobackend.cc | 17 | ||||
-rw-r--r-- | libs/backends/alsa/alsa_rawmidi.cc | 2 | ||||
-rw-r--r-- | libs/backends/alsa/rt_thread.h | 3 |
3 files changed, 12 insertions, 10 deletions
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index e5b38760c4..cec72418a4 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -491,7 +491,7 @@ AlsaAudioBackend::_start (bool for_latency_measurement) _run = true; _port_change_flag = false; - if (_realtime_pthread_create (SCHED_FIFO, -20, + if (_realtime_pthread_create (SCHED_FIFO, -20, 100000, &_main_thread, pthread_process, this)) { if (pthread_create (&_main_thread, NULL, pthread_process, this)) @@ -620,16 +620,19 @@ AlsaAudioBackend::create_process_thread (boost::function<void()> func) pthread_attr_t attr; size_t stacksize = 100000; - pthread_attr_init (&attr); - pthread_attr_setstacksize (&attr, stacksize); ThreadData* td = new ThreadData (this, func, stacksize); - if (pthread_create (&thread_id, &attr, alsa_process_thread, td)) { - PBD::error << _("AudioEngine: cannot create process thread.") << endmsg; + if (_realtime_pthread_create (SCHED_FIFO, -21, stacksize, + &thread_id, alsa_process_thread, td)) { + pthread_attr_init (&attr); + pthread_attr_setstacksize (&attr, stacksize); + if (pthread_create (&thread_id, &attr, alsa_process_thread, td)) { + PBD::error << _("AudioEngine: cannot create process thread.") << endmsg; + pthread_attr_destroy (&attr); + return -1; + } pthread_attr_destroy (&attr); - return -1; } - pthread_attr_destroy (&attr); _threads.push_back (thread_id); return 0; diff --git a/libs/backends/alsa/alsa_rawmidi.cc b/libs/backends/alsa/alsa_rawmidi.cc index 035860c259..00fc39a4cf 100644 --- a/libs/backends/alsa/alsa_rawmidi.cc +++ b/libs/backends/alsa/alsa_rawmidi.cc @@ -134,7 +134,7 @@ static void * pthread_process (void *arg) int AlsaRawMidiIO::start () { - if (_realtime_pthread_create (SCHED_FIFO, -19, + if (_realtime_pthread_create (SCHED_FIFO, -21, 100000, &_main_thread, pthread_process, this)) { if (pthread_create (&_main_thread, NULL, pthread_process, this)) { diff --git a/libs/backends/alsa/rt_thread.h b/libs/backends/alsa/rt_thread.h index 68749ab7c3..3d2efe2063 100644 --- a/libs/backends/alsa/rt_thread.h +++ b/libs/backends/alsa/rt_thread.h @@ -24,7 +24,7 @@ static int _realtime_pthread_create ( - int policy, int priority, + const int policy, int priority, const size_t stacksize, pthread_t *thread, void *(*start_routine) (void *), void *arg) @@ -33,7 +33,6 @@ _realtime_pthread_create ( pthread_attr_t attr; struct sched_param parm; - const size_t stacksize = 100000; const int p_min = sched_get_priority_min (policy); const int p_max = sched_get_priority_max (policy); |