This only applies to linux systems. Here, sched_setscheduler() is
called to get realtime scheduling. With this patch, the return value
of this function is now checked and a warning / error message is
generated if it fails.
---
 src/output/OutputThread.cxx |  7 ++++++-
 src/thread/Util.hxx         | 19 +++++++++++++++----
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/src/output/OutputThread.cxx b/src/output/OutputThread.cxx
index 9baaaf0..d2f9ea8 100644
--- a/src/output/OutputThread.cxx
+++ b/src/output/OutputThread.cxx
@@ -587,7 +587,12 @@ AudioOutput::Task()
 {
        FormatThreadName("output:%s", name);

-       SetThreadRealtime();
+       Error error;
+       if(!SetThreadRealtime(error)) {
+               LogError(error);
+               LogWarning(output_domain,
+                       "OutputThread could not get realtime scheduling, continuing 
anyway");
+       }
        SetThreadTimerSlackUS(100);

        mutex.lock();
diff --git a/src/thread/Util.hxx b/src/thread/Util.hxx
index ff8dbbe..fdc767c 100644
--- a/src/thread/Util.hxx
+++ b/src/thread/Util.hxx
@@ -30,6 +30,8 @@
 #ifndef THREAD_UTIL_HXX
 #define THREAD_UTIL_HXX

+#include "util/Error.hxx"
+
 #ifdef __linux__
 #include <sched.h>
 #include <sys/syscall.h>
@@ -81,9 +83,11 @@ SetThreadIdlePriority()

 /**
  * Raise the current thread's priority to "real-time" (very high).
+ * @param[out] error   Receives error information on failure
+ * @return     true on success (always true on non-linux systems)
  */
-static inline void
-SetThreadRealtime()
+static inline bool
+SetThreadRealtime(Error& error)
 {
 #ifdef __linux__
        struct sched_param sched_param;
@@ -94,8 +98,15 @@ SetThreadRealtime()
        policy |= SCHED_RESET_ON_FORK;
 #endif

-       sched_setscheduler(0, policy, &sched_param);
-#endif
+       if(sched_setscheduler(0, policy, &sched_param)==0) {
+               return true;
+       } else {
+               error.FormatErrno("sched_setscheduler failed");
+               return false;
+       }
+#else
+       return true; // on non-linux systems, we pretend it worked
+#endif // __linux__
 };

 #endif
--
1.9.1

_______________________________________________
mpd-devel mailing list
[email protected]
http://mailman.blarg.de/listinfo/mpd-devel

Reply via email to