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 and an error message are
generated if it failed.
---
 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