From 0c5ab0dfc1ddd88a783a612e713f1b371a48d2cc Mon Sep 17 00:00:00 2001 From: Mark Hills Date: Fri, 12 May 2023 16:31:03 +0100 Subject: [PATCH] Do not use the ambiguous sched_setscheduler() POSIX specifies this is per-process, and GNU implemented it on the thread. Musl realises the problem with this and so doesn't implement it at all, forcing this more specific alternative to be used. --- sched.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/sched.c b/sched.c index fedf816..369b092 100644 --- a/sched.c +++ b/sched.c @@ -17,6 +17,8 @@ * */ +#include +#include #include #include #include @@ -28,23 +30,20 @@ int go_realtime(void) { int max_pri; - struct sched_param sp; - - if (sched_getparam(0, &sp)) { - perror("sched_getparam"); - return -1; - } + const struct sched_param sp = { + .sched_priority = REALTIME_PRIORITY, + }; max_pri = sched_get_priority_max(SCHED_FIFO); - sp.sched_priority = REALTIME_PRIORITY; if (sp.sched_priority > max_pri) { fprintf(stderr, "Invalid priority (maximum %d)\n", max_pri); return -1; } - if (sched_setscheduler(0, SCHED_FIFO, &sp)) { - perror("sched_setscheduler"); + errno = pthread_setschedparam(pthread_self(), SCHED_FIFO, &sp); + if (errno) { + perror("pthread_setschedparam"); return -1; }