summaryrefslogtreecommitdiff
path: root/src/thread
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2018-02-11 13:22:43 +0100
committerMax Kellermann <max@musicpd.org>2018-02-11 13:22:43 +0100
commit65bbb0e0aa0f613a9da683900838d2912f2454ba (patch)
tree3527ff6fdec933826a9278a611166d4b69f14827 /src/thread
parent5147654f6c6e452132be6bd4b8d525d1c1856878 (diff)
parentc2940a8385201b6501a43aefa6f9bee983950c01 (diff)
Merge tag 'v0.20.17'
release v0.20.17
Diffstat (limited to 'src/thread')
-rw-r--r--src/thread/Util.cxx26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/thread/Util.cxx b/src/thread/Util.cxx
index d50d507e1..5b61b62be 100644
--- a/src/thread/Util.cxx
+++ b/src/thread/Util.cxx
@@ -38,10 +38,12 @@
#include <windows.h>
#endif
-#if defined(__linux__) && !defined(ANDROID)
+#ifdef __linux__
+
+#ifndef ANDROID
static int
-ioprio_set(int which, int who, int ioprio) noexcept
+linux_ioprio_set(int which, int who, int ioprio) noexcept
{
return syscall(__NR_ioprio_set, which, who, ioprio);
}
@@ -55,7 +57,21 @@ ioprio_set_idle() noexcept
static constexpr int _IOPRIO_IDLE =
(_IOPRIO_CLASS_IDLE << _IOPRIO_CLASS_SHIFT) | 7;
- ioprio_set(_IOPRIO_WHO_PROCESS, 0, _IOPRIO_IDLE);
+ linux_ioprio_set(_IOPRIO_WHO_PROCESS, 0, _IOPRIO_IDLE);
+}
+
+#endif /* !ANDROID */
+
+/**
+ * Wrapper for the "sched_setscheduler" system call. We don't use the
+ * one from the C library because Musl has an intentionally broken
+ * implementation.
+ */
+static int
+linux_sched_setscheduler(pid_t pid, int sched,
+ const struct sched_param *param) noexcept
+{
+ return syscall(__NR_sched_setscheduler, pid, sched, param);
}
#endif
@@ -66,7 +82,7 @@ SetThreadIdlePriority() noexcept
#ifdef __linux__
#ifdef SCHED_IDLE
static struct sched_param sched_param;
- sched_setscheduler(0, SCHED_IDLE, &sched_param);
+ linux_sched_setscheduler(0, SCHED_IDLE, &sched_param);
#endif
#ifndef ANDROID
@@ -92,7 +108,7 @@ SetThreadRealtime()
policy |= SCHED_RESET_ON_FORK;
#endif
- if (sched_setscheduler(0, policy, &sched_param) < 0)
+ if (linux_sched_setscheduler(0, policy, &sched_param) < 0)
throw MakeErrno("sched_setscheduler failed");
#endif // __linux__
};