add support for SCHED_FIFO

git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@163 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Lennart Poettering 2004-09-01 00:23:51 +00:00
parent 9618aea5df
commit 34fe8bd893
24 changed files with 181 additions and 49 deletions

View file

@ -37,6 +37,8 @@
#include <signal.h>
#include <pthread.h>
#include <sys/time.h>
#include <sched.h>
#include <sys/resource.h>
#include "util.h"
#include "xmalloc.h"
@ -83,7 +85,7 @@ ssize_t pa_loop_read(int fd, void*data, size_t size) {
break;
ret += r;
data += r;
data = (uint8_t*) data + r;
size -= r;
}
@ -104,7 +106,7 @@ ssize_t pa_loop_write(int fd, const void*data, size_t size) {
break;
ret += r;
data += r;
data = (uint8_t*) data + r;
size -= r;
}
@ -213,3 +215,37 @@ uint32_t pa_age(struct timeval *tv) {
return r;
}
#define NICE_LEVEL (-15)
void pa_raise_priority(void) {
if (setpriority(PRIO_PROCESS, 0, NICE_LEVEL) < 0)
fprintf(stderr, __FILE__": setpriority() failed: %s\n", strerror(errno));
else
fprintf(stderr, __FILE__": Successfully gained nice level %i.\n", NICE_LEVEL);
#ifdef _POSIX_PRIORITY_SCHEDULING
{
struct sched_param sp;
sched_getparam(0, &sp);
sp.sched_priority = 1;
if (sched_setscheduler(0, SCHED_FIFO, &sp) < 0)
fprintf(stderr, __FILE__": sched_setscheduler() failed: %s\n", strerror(errno));
else
fprintf(stderr, __FILE__": Successfully gained SCHED_FIFO scheduling.\n");
}
#endif
}
void pa_reset_priority(void) {
#ifdef _POSIX_PRIORITY_SCHEDULING
{
struct sched_param sp;
sched_getparam(0, &sp);
sp.sched_priority = 0;
sched_setscheduler(0, SCHED_OTHER, &sp);
}
#endif
setpriority(PRIO_PROCESS, 0, 0);
}