aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/OutputThread.cxx3
-rw-r--r--src/thread/Util.hxx13
2 files changed, 16 insertions, 0 deletions
diff --git a/src/OutputThread.cxx b/src/OutputThread.cxx
index 1b5a44e9d..b56e7f1ca 100644
--- a/src/OutputThread.cxx
+++ b/src/OutputThread.cxx
@@ -30,6 +30,7 @@
#include "PlayerControl.hxx"
#include "MusicPipe.hxx"
#include "MusicChunk.hxx"
+#include "thread/Util.hxx"
#include "system/FatalError.hxx"
#include "util/Error.hxx"
#include "Log.hxx"
@@ -578,6 +579,8 @@ audio_output_task(void *arg)
{
struct audio_output *ao = (struct audio_output *)arg;
+ SetThreadRealtime();
+
ao->mutex.lock();
while (1) {
diff --git a/src/thread/Util.hxx b/src/thread/Util.hxx
index fe36468c3..c09fef532 100644
--- a/src/thread/Util.hxx
+++ b/src/thread/Util.hxx
@@ -69,4 +69,17 @@ SetThreadIdlePriority()
#endif
};
+/**
+ * Raise the current thread's priority to "real-time" (very high).
+ */
+static inline void
+SetThreadRealtime()
+{
+#ifdef __linux__
+ struct sched_param sched_param;
+ sched_param.sched_priority = 50;
+ sched_setscheduler(0, SCHED_FIFO, &sched_param);
+#endif
+};
+
#endif