diff --git a/src/core/linux/SDL_dbus.c b/src/core/linux/SDL_dbus.c
index e0d9972..c227419 100644
--- a/src/core/linux/SDL_dbus.c
+++ b/src/core/linux/SDL_dbus.c
@@ -21,6 +21,11 @@
 #include "../../SDL_internal.h"
 #include "SDL_dbus.h"
 
+#if !SDL_THREADS_DISABLED
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
 #if SDL_USE_LIBDBUS
 /* we never link directly to libdbus. */
 #include "SDL_loadso.h"
@@ -342,6 +347,82 @@
 
     return SDL_TRUE;
 }
+
+#if !SDL_THREADS_DISABLED
+/* d-bus queries to org.freedesktop.RealtimeKit1. */
+#define RTKIT_DBUS_NODE "org.freedesktop.RealtimeKit1"
+#define RTKIT_DBUS_PATH "/org/freedesktop/RealtimeKit1"
+#define RTKIT_DBUS_INTERFACE "org.freedesktop.RealtimeKit1"
+
+static pthread_once_t rtkit_initialize_once = PTHREAD_ONCE_INIT;
+static Sint32 rtkit_min_nice_level = -20;
+
+static void
+rtkit_initialize()
+{
+    SDL_DBusContext *dbus = SDL_DBus_GetContext();
+
+    /* Try getting minimum nice level: this is often greater than PRIO_MIN (-20). */
+    if (!dbus || !SDL_DBus_QueryPropertyOnConnection(dbus->system_conn, RTKIT_DBUS_NODE, RTKIT_DBUS_PATH, RTKIT_DBUS_INTERFACE, "MinNiceLevel",
+                                            DBUS_TYPE_INT32, &rtkit_min_nice_level)) {
+        rtkit_min_nice_level = -20;
+    }
+}
+
+static SDL_bool
+rtkit_setpriority(pid_t thread, int nice_level)
+{
+    Uint64 ui64 = (Uint64)thread;
+    Sint32 si32 = (Sint32)nice_level;
+    SDL_DBusContext *dbus = SDL_DBus_GetContext();
+
+    pthread_once(&rtkit_initialize_once, rtkit_initialize);
+
+    if (si32 < rtkit_min_nice_level)
+        si32 = rtkit_min_nice_level;
+
+    if (!dbus || !SDL_DBus_CallMethodOnConnection(dbus->system_conn,
+            RTKIT_DBUS_NODE, RTKIT_DBUS_PATH, RTKIT_DBUS_INTERFACE, "MakeThreadHighPriority",
+            DBUS_TYPE_UINT64, &ui64, DBUS_TYPE_INT32, &si32, DBUS_TYPE_INVALID,
+            DBUS_TYPE_INVALID)) {
+        return SDL_FALSE;
+    }
+    return SDL_TRUE;
+}
 #endif
 
+#endif
+
+/* this is a public symbol, so it has to exist even if threads are disabled. */
+int
+SDL_LinuxSetThreadPriority(Sint64 threadID, int priority)
+{
+#if SDL_THREADS_DISABLED
+    return SDL_Unsupported();
+#else
+    if (setpriority(PRIO_PROCESS, (id_t)threadID, priority) == 0) {
+        return 0;
+    }
+
+#if SDL_USE_LIBDBUS
+    /* Note that this fails if you're trying to set high priority
+       and you don't have root permission. BUT DON'T RUN AS ROOT!
+
+       You can grant the ability to increase thread priority by
+       running the following command on your application binary:
+          sudo setcap 'cap_sys_nice=eip' <application>
+
+       Let's try setting priority with RealtimeKit...
+
+       README and sample code at: http://git.0pointer.net/rtkit.git
+    */
+    if (rtkit_setpriority((pid_t)threadID, priority)) {
+        return 0;
+    }
+#endif
+
+    return SDL_SetError("setpriority() failed");
+#endif
+}
+
 /* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/thread/pthread/SDL_systhread.c b/src/thread/pthread/SDL_systhread.c
index ec32937..92ffaea 100644
--- a/src/thread/pthread/SDL_systhread.c
+++ b/src/thread/pthread/SDL_systhread.c
@@ -184,84 +184,6 @@
     return ((SDL_threadID) pthread_self());
 }
 
-#if __LINUX__
-/* d-bus queries to org.freedesktop.RealtimeKit1. */
-#if SDL_USE_LIBDBUS
-
-#define RTKIT_DBUS_NODE "org.freedesktop.RealtimeKit1"
-#define RTKIT_DBUS_PATH "/org/freedesktop/RealtimeKit1"
-#define RTKIT_DBUS_INTERFACE "org.freedesktop.RealtimeKit1"
-
-static pthread_once_t rtkit_initialize_once = PTHREAD_ONCE_INIT;
-static Sint32 rtkit_min_nice_level = -20;
-
-static void
-rtkit_initialize()
-{
-    SDL_DBusContext *dbus = SDL_DBus_GetContext();
-
-    /* Try getting minimum nice level: this is often greater than PRIO_MIN (-20). */
-    if (!dbus || !SDL_DBus_QueryPropertyOnConnection(dbus->system_conn, RTKIT_DBUS_NODE, RTKIT_DBUS_PATH, RTKIT_DBUS_INTERFACE, "MinNiceLevel",
-                                            DBUS_TYPE_INT32, &rtkit_min_nice_level)) {
-        rtkit_min_nice_level = -20;
-    }
-}
-
-static SDL_bool
-rtkit_setpriority(pid_t thread, int nice_level)
-{
-    Uint64 ui64 = (Uint64)thread;
-    Sint32 si32 = (Sint32)nice_level;
-    SDL_DBusContext *dbus = SDL_DBus_GetContext();
-
-    pthread_once(&rtkit_initialize_once, rtkit_initialize);
-
-    if (si32 < rtkit_min_nice_level)
-        si32 = rtkit_min_nice_level;
-
-    if (!dbus || !SDL_DBus_CallMethodOnConnection(dbus->system_conn,
-            RTKIT_DBUS_NODE, RTKIT_DBUS_PATH, RTKIT_DBUS_INTERFACE, "MakeThreadHighPriority",
-            DBUS_TYPE_UINT64, &ui64, DBUS_TYPE_INT32, &si32, DBUS_TYPE_INVALID,
-            DBUS_TYPE_INVALID)) {
-        return SDL_FALSE;
-    }
-    return SDL_TRUE;
-}
-
-#else
-
-static SDL_bool
-rtkit_setpriority(pid_t thread, int nice_level)
-{
-    return SDL_FALSE;
-}
-
-#endif /* !SDL_USE_LIBDBUS */
-
-int
-SDL_LinuxSetThreadPriority(Sint64 threadID, int priority)
-{
-    if (setpriority(PRIO_PROCESS, (id_t)threadID, priority) < 0) {
-        /* Note that this fails if you're trying to set high priority
-           and you don't have root permission. BUT DON'T RUN AS ROOT!
-
-           You can grant the ability to increase thread priority by
-           running the following command on your application binary:
-               sudo setcap 'cap_sys_nice=eip' <application>
-
-           Let's try setting priority with RealtimeKit...
-
-           README and sample code at:
-             http://git.0pointer.net/rtkit.git
-         */
-        if (rtkit_setpriority((pid_t)threadID, priority) == SDL_FALSE) {
-            return SDL_SetError("setpriority() failed");
-        }
-    }
-    return 0;
-}
-#endif /* __LINUX__ */
-
 int
 SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
 {
diff --git a/src/video/wayland/SDL_waylanddatamanager.c b/src/video/wayland/SDL_waylanddatamanager.c
index f1b9742..08c9e71 100644
--- a/src/video/wayland/SDL_waylanddatamanager.c
+++ b/src/video/wayland/SDL_waylanddatamanager.c
@@ -53,7 +53,11 @@
     sigemptyset(&sig_set);
     sigaddset(&sig_set, SIGPIPE);  
 
-    pthread_sigmask(SIG_BLOCK, &sig_set, &old_sig_set); 
+#if SDL_THREADS_DISABLED
+    sigprocmask(SIG_BLOCK, &sig_set, &old_sig_set);
+#else
+    pthread_sigmask(SIG_BLOCK, &sig_set, &old_sig_set);
+#endif
 
     if (ready == 0) {
         bytes_written = SDL_SetError("Pipe timeout");
@@ -70,7 +74,12 @@
     }
 
     sigtimedwait(&sig_set, 0, &zerotime);
+
+#if SDL_THREADS_DISABLED
+    sigprocmask(SIG_SETMASK, &old_sig_set, NULL);
+#else
     pthread_sigmask(SIG_SETMASK, &old_sig_set, NULL);
+#endif
 
     return bytes_written;
 }
