diff options
author | Max Kellermann <max@musicpd.org> | 2018-02-11 13:22:43 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2018-02-11 13:22:43 +0100 |
commit | 65bbb0e0aa0f613a9da683900838d2912f2454ba (patch) | |
tree | 3527ff6fdec933826a9278a611166d4b69f14827 /src/thread | |
parent | 5147654f6c6e452132be6bd4b8d525d1c1856878 (diff) | |
parent | c2940a8385201b6501a43aefa6f9bee983950c01 (diff) |
Merge tag 'v0.20.17'
release v0.20.17
Diffstat (limited to 'src/thread')
-rw-r--r-- | src/thread/Util.cxx | 26 |
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__ }; |