From f9fea5c2a3ef4d84a0e3f3474990af04932a4d86 Mon Sep 17 00:00:00 2001 From: zeussuse <193160247+zeussuse@users.noreply.github.com> Date: Wed, 26 Mar 2025 23:23:16 +0000 Subject: [PATCH] Create realtime.c --- src/realtime.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/realtime.c diff --git a/src/realtime.c b/src/realtime.c new file mode 100644 index 00000000..cb3ffd46 --- /dev/null +++ b/src/realtime.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include "labwc.h" + +static void child_fork_callback(void) { + + struct sched_param param; + param.sched_priority = 0; + int ret = pthread_setschedparam(pthread_self(), SCHED_OTHER, ¶m); + if (ret != 0) { + wlr_log(WLR_ERROR, "Failed to reset scheduler policy on fork"); + } +} + +void set_rr_scheduling(void) { + int prio = sched_get_priority_min(SCHED_RR); + int old_policy; + int ret; + struct sched_param param; + ret = pthread_getschedparam(pthread_self(), &old_policy, ¶m); + if (ret != 0) { + wlr_log(WLR_DEBUG, "Failed to get old scheduling priority"); + return; + } + + param.sched_priority = prio; + ret = pthread_setschedparam(pthread_self(), SCHED_RR, ¶m); + + if (ret != 0) { + wlr_log(WLR_INFO, "Failed to set scheduling priority to %d", prio); + return; + } + + pthread_atfork(NULL, NULL, child_fork_callback); +}