summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-06-06 20:37:00 +0200
committerRobin Gareus <robin@gareus.org>2014-06-07 17:28:46 +0200
commitc452cd9be2f2fcbe25c6df99e0e0d639b9edf197 (patch)
treed9edaea0f3b4b2e8da24d1c345253168bbae4230 /libs
parentb68d2e25b246061b11e7576265241005a73cbbd0 (diff)
ALSA rt-thread priority fixes
Diffstat (limited to 'libs')
-rw-r--r--libs/backends/alsa/alsa_audiobackend.cc17
-rw-r--r--libs/backends/alsa/alsa_rawmidi.cc2
-rw-r--r--libs/backends/alsa/rt_thread.h3
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);