diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 24b9022c5..b73b06e28 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -801,7 +801,7 @@ extern "C" { * Currently no other platform hint values are defined but may be in the future. * * \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro -* configured execution budget for rtkit. This budget is queriably through RLIMIT_RTTIME +* configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME * after calling SDL_SetThreadPriority(). */ #define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY" diff --git a/src/thread/pthread/SDL_systhread.c b/src/thread/pthread/SDL_systhread.c index b6cd04a5a..e4795a6c4 100644 --- a/src/thread/pthread/SDL_systhread.c +++ b/src/thread/pthread/SDL_systhread.c @@ -208,7 +208,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) int pri_policy; pthread_t thread = pthread_self(); const char *policyhint = SDL_GetHint(SDL_HINT_THREAD_PRIORITY_POLICY); - const SDL_bool allow_realtime_hint = SDL_GetHintBoolean(SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL, SDL_FALSE); + const SDL_bool timecritical_realtime_hint = SDL_GetHintBoolean(SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL, SDL_FALSE); if (pthread_getschedparam(thread, &policy, &sched) != 0) { return SDL_SetError("pthread_getschedparam() failed"); @@ -229,7 +229,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) pri_policy = SCHED_RR; break; #else - pri_policy = allow_realtime_hint ? SCHED_RR : SCHED_OTHER; + pri_policy = SCHED_OTHER; break; #endif default: @@ -237,6 +237,10 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) break; } + if (timecritical_realtime_hint && priority == SDL_THREAD_PRIORITY_TIME_CRITICAL) { + pri_policy = SCHED_RR; + } + if (policyhint) { if (SDL_strcmp(policyhint, "current") == 0) { /* Leave current thread scheduler policy unchanged */