mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-12-19 08:57:00 -05:00
add CPU load limiter
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@176 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
c73a298f88
commit
4a9239f808
10 changed files with 392 additions and 40 deletions
49
polyp/main.c
49
polyp/main.c
|
|
@ -43,6 +43,7 @@
|
|||
#include "util.h"
|
||||
#include "sioman.h"
|
||||
#include "xmalloc.h"
|
||||
#include "cpulimit.h"
|
||||
|
||||
static struct pa_mainloop *mainloop;
|
||||
|
||||
|
|
@ -54,15 +55,37 @@ static void drop_root(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static void exit_signal_callback(struct pa_mainloop_api*m, struct pa_signal_event *e, int sig, void *userdata) {
|
||||
m->quit(m, 1);
|
||||
fprintf(stderr, __FILE__": got signal.\n");
|
||||
static const char* signal_name(int s) {
|
||||
switch(s) {
|
||||
case SIGINT: return "SIGINT";
|
||||
case SIGTERM: return "SIGTERM";
|
||||
case SIGUSR1: return "SIGUSR1";
|
||||
case SIGUSR2: return "SIGUSR2";
|
||||
case SIGXCPU: return "SIGXCPU";
|
||||
case SIGPIPE: return "SIGPIPE";
|
||||
default: return "UNKNOWN SIGNAL";
|
||||
}
|
||||
}
|
||||
|
||||
static void aux_signal_callback(struct pa_mainloop_api*m, struct pa_signal_event *e, int sig, void *userdata) {
|
||||
struct pa_core *c = userdata;
|
||||
assert(c);
|
||||
pa_module_load(c, sig == SIGUSR1 ? "module-cli" : "module-cli-protocol-unix", NULL);
|
||||
static void signal_callback(struct pa_mainloop_api*m, struct pa_signal_event *e, int sig, void *userdata) {
|
||||
fprintf(stderr, __FILE__": got signal %s.\n", signal_name(sig));
|
||||
|
||||
switch (sig) {
|
||||
case SIGUSR1:
|
||||
pa_module_load(userdata, "module-cli", NULL);
|
||||
return;
|
||||
|
||||
case SIGUSR2:
|
||||
pa_module_load(userdata, "module-cli-protocol-unix", NULL);
|
||||
return;
|
||||
|
||||
case SIGINT:
|
||||
case SIGTERM:
|
||||
default:
|
||||
fprintf(stderr, "Exiting.\n");
|
||||
m->quit(m, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void close_pipe(int p[2]) {
|
||||
|
|
@ -157,16 +180,19 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
r = pa_signal_init(pa_mainloop_get_api(mainloop));
|
||||
assert(r == 0);
|
||||
pa_signal_new(SIGINT, exit_signal_callback, NULL);
|
||||
pa_signal_new(SIGTERM, exit_signal_callback, NULL);
|
||||
pa_signal_new(SIGINT, signal_callback, c);
|
||||
pa_signal_new(SIGTERM, signal_callback, c);
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
||||
c = pa_core_new(pa_mainloop_get_api(mainloop));
|
||||
assert(c);
|
||||
|
||||
pa_signal_new(SIGUSR1, aux_signal_callback, c);
|
||||
pa_signal_new(SIGUSR2, aux_signal_callback, c);
|
||||
pa_signal_new(SIGUSR1, signal_callback, c);
|
||||
pa_signal_new(SIGUSR2, signal_callback, c);
|
||||
|
||||
r = pa_cpu_limit_init(pa_mainloop_get_api(mainloop));
|
||||
assert(r == 0);
|
||||
|
||||
buf = pa_strbuf_new();
|
||||
assert(buf);
|
||||
r = pa_cli_command_execute(c, cmdline->cli_commands, buf, &cmdline->fail, &cmdline->verbose);
|
||||
|
|
@ -193,6 +219,7 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
pa_core_free(c);
|
||||
|
||||
pa_cpu_limit_done();
|
||||
pa_signal_done();
|
||||
pa_mainloop_free(mainloop);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue