Skip to content

Commit

Permalink
More Linux fixes.
Browse files Browse the repository at this point in the history
  • Loading branch information
slouken committed May 26, 2020
1 parent c7d1dab commit 0713c57
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 35 deletions.
66 changes: 33 additions & 33 deletions src/core/linux/SDL_threadprio.c
Expand Up @@ -223,53 +223,53 @@ SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedP
#if SDL_THREADS_DISABLED
return SDL_Unsupported();
#else
if (schedPolicy != SCHED_RR && schedPolicy != SCHED_FIFO && setpriority(PRIO_PROCESS, (id_t)threadID, priority) == 0) {
return 0;
}
int osPriority;

#if SDL_USE_LIBDBUS
/* Note that this fails you most likely:
* Have your process's scheduler incorrectly configured.
See the requirements at:
http://git.0pointer.net/rtkit.git/tree/README#n16
* Encountered dbus/polkit security restrictions. Note
that the RealtimeKit1 dbus endpoint is inaccessible
over ssh connections for most common distro configs.
You might want to check your local config for details:
/usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy
README and sample code at: http://git.0pointer.net/rtkit.git
*/
if (schedPolicy == SCHED_RR || schedPolicy == SCHED_FIFO) {
int rtPriority;

if (sdlPriority == SDL_THREAD_PRIORITY_LOW) {
rtPriority = 1;
osPriority = 1;
} else if (sdlPriority == SDL_THREAD_PRIORITY_HIGH) {
rtPriority = rtkit_max_realtime_priority * 3 / 4;
osPriority = rtkit_max_realtime_priority * 3 / 4;
} else if (sdlPriority == SDL_THREAD_PRIORITY_TIME_CRITICAL) {
rtPriority = rtkit_max_realtime_priority;
osPriority = rtkit_max_realtime_priority;
} else {
rtPriority = rtkit_max_realtime_priority / 2;
}

if (rtkit_setpriority_realtime((pid_t)threadID, rtPriority)) {
return 0;
osPriority = rtkit_max_realtime_priority / 2;
}
} else {
int niceLevel;

if (sdlPriority == SDL_THREAD_PRIORITY_LOW) {
niceLevel = 19;
osPriority = 19;
} else if (sdlPriority == SDL_THREAD_PRIORITY_HIGH) {
niceLevel = -10;
osPriority = -10;
} else if (sdlPriority == SDL_THREAD_PRIORITY_TIME_CRITICAL) {
niceLevel = -20;
osPriority = -20;
} else {
niceLevel = 0;
osPriority = 0;
}

if (setpriority(PRIO_PROCESS, (id_t)threadID, osPriority) == 0) {
return 0;
}
}

#if SDL_USE_LIBDBUS
/* Note that this fails you most likely:
* Have your process's scheduler incorrectly configured.
See the requirements at:
http://git.0pointer.net/rtkit.git/tree/README#n16
* Encountered dbus/polkit security restrictions. Note
that the RealtimeKit1 dbus endpoint is inaccessible
over ssh connections for most common distro configs.
You might want to check your local config for details:
/usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy
if (rtkit_setpriority_nice((pid_t)threadID, niceLevel)) {
README and sample code at: http://git.0pointer.net/rtkit.git
*/
if (schedPolicy == SCHED_RR || schedPolicy == SCHED_FIFO) {
if (rtkit_setpriority_realtime((pid_t)threadID, osPriority)) {
return 0;
}
} else {
if (rtkit_setpriority_nice((pid_t)threadID, osPriority)) {
return 0;
}
}
Expand Down
6 changes: 4 additions & 2 deletions src/thread/pthread/SDL_systhread.c
Expand Up @@ -247,8 +247,10 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
}

#if __LINUX__
pid_t linuxTid = syscall(SYS_gettid);
return SDL_LinuxSetThreadPriorityAndPolicy(linuxTid, priority, policy);
{
pid_t linuxTid = syscall(SYS_gettid);
return SDL_LinuxSetThreadPriorityAndPolicy(linuxTid, priority, policy);
}
#else
if (priority == SDL_THREAD_PRIORITY_LOW) {
sched.sched_priority = sched_get_priority_min(policy);
Expand Down

0 comments on commit 0713c57

Please sign in to comment.