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