Commit 12091fcf authored by Max Kellermann's avatar Max Kellermann

thread/Util: throw exception on error

parent 5598826e
......@@ -40,6 +40,8 @@
#include "Log.hxx"
#include "Compiler.h"
#include <stdexcept>
#include <assert.h>
#include <string.h>
......@@ -597,12 +599,13 @@ AudioOutput::Task()
{
FormatThreadName("output:%s", name);
Error error;
if(!SetThreadRealtime(error)) {
LogError(error);
LogWarning(output_domain,
"OutputThread could not get realtime scheduling, continuing anyway");
try {
SetThreadRealtime();
} catch (const std::runtime_error &e) {
LogError(e,
"OutputThread could not get realtime scheduling, continuing anyway");
}
SetThreadTimerSlackUS(100);
mutex.lock();
......
......@@ -27,9 +27,8 @@
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "Util.hxx"
#include "util/Error.hxx"
#include "system/Error.hxx"
#ifdef __linux__
#include <sched.h>
......@@ -77,8 +76,8 @@ SetThreadIdlePriority()
#endif
};
bool
SetThreadRealtime(Error& error)
void
SetThreadRealtime()
{
#ifdef __linux__
struct sched_param sched_param;
......@@ -89,13 +88,7 @@ SetThreadRealtime(Error& error)
policy |= SCHED_RESET_ON_FORK;
#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
if (sched_setscheduler(0, policy, &sched_param) < 0)
throw MakeErrno("sched_setscheduler failed");
#endif // __linux__
};
......@@ -30,8 +30,6 @@
#ifndef THREAD_UTIL_HXX
#define THREAD_UTIL_HXX
class Error;
/**
* Lower the current thread's priority to "idle" (very low).
*/
......@@ -40,10 +38,10 @@ 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)
*
* Throws std::system_error on error.
*/
bool
SetThreadRealtime(Error &error);
void
SetThreadRealtime();
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment