]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - audiod.c
stdout: Switch to the alternative post select method.
[paraslash.git] / audiod.c
index 6da2ccc78db5baf374cb3997f34012605d75b6d7..f412dc6d3b5e30ed5514eaacd6f6c6add0e419cc 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -495,8 +495,13 @@ static void open_filters(struct slot_info *s)
                fn->filter_num = a->filter_nums[i];
                fn->conf = a->filter_conf[i];
                fn->task.pre_select = f->pre_select;
-               fn->task.post_select = f->post_select;
-
+               if (f->new_post_select) {
+                       fn->task.new_post_select = f->new_post_select;
+                       fn->task.post_select = NULL;
+               } else {
+                       fn->task.new_post_select = NULL;
+                       fn->task.post_select = f->post_select;
+               }
                fn->btrn = btr_new_node(&(struct btr_node_description)
                        EMBRACE(.name = f->name, .parent = parent,
                                .handler = f->execute, .context = fn));
@@ -560,7 +565,13 @@ static int open_receiver(int format)
        PARA_NOTICE_LOG("started %s: %s receiver in slot %d\n",
                audio_formats[format], r->name, slot_num);
        rn->task.pre_select = r->pre_select;
-       rn->task.post_select = r->post_select;
+       if (r->new_post_select) {
+               rn->task.new_post_select = r->new_post_select;
+               rn->task.post_select = NULL;
+       } else {
+               rn->task.new_post_select = NULL;
+               rn->task.post_select = r->post_select;
+       }
        sprintf(rn->task.status, "%s receiver node", r->name);
        register_task(&sched, &rn->task);
        return slot_num;
@@ -992,7 +1003,7 @@ static void signal_pre_select(struct sched *s, struct task *t)
        para_fd_set(st->fd, &s->rfds, &s->max_fileno);
 }
 
-static void signal_post_select(struct sched *s, __a_unused struct task *t)
+static int signal_post_select(struct sched *s, __a_unused struct task *t)
 {
        int signum;
 
@@ -1004,12 +1015,14 @@ static void signal_post_select(struct sched *s, __a_unused struct task *t)
                PARA_EMERG_LOG("terminating on signal %d\n", signum);
                clean_exit(EXIT_FAILURE, "caught deadly signal");
        }
+       return 0;
 }
 
 static void signal_setup_default(struct signal_task *st)
 {
        st->task.pre_select = signal_pre_select;
-       st->task.post_select = signal_post_select;
+       st->task.new_post_select = signal_post_select;
+       st->task.post_select = NULL;
        sprintf(st->task.status, "signal task");
 }
 
@@ -1019,7 +1032,7 @@ static void command_pre_select(struct sched *s, struct task *t)
        para_fd_set(ct->fd, &s->rfds, &s->max_fileno);
 }
 
-static void command_post_select(struct sched *s, struct task *t)
+static int command_post_select(struct sched *s, struct task *t)
 {
        int ret;
        struct command_task *ct = container_of(t, struct command_task, task);
@@ -1036,12 +1049,14 @@ static void command_post_select(struct sched *s, struct task *t)
        if (ret < 0)
                PARA_ERROR_LOG("%s\n", para_strerror(-ret));
        audiod_status_dump();
+       return 0;
 }
 
 static void init_command_task(struct command_task *ct)
 {
        ct->task.pre_select = command_pre_select;
-       ct->task.post_select = command_post_select;
+       ct->task.new_post_select = command_post_select;
+       ct->task.post_select = NULL;
        ct->task.error = 0;
        ct->fd = audiod_get_socket(); /* doesn't return on errors */
        sprintf(ct->task.status, "command task");
@@ -1191,7 +1206,7 @@ min_delay:
 }
 
 /* restart the client task if necessary */
-static void status_post_select(struct sched *s, struct task *t)
+static int status_post_select(struct sched *s, struct task *t)
 {
        struct status_task *st = container_of(t, struct status_task, task);
 
@@ -1264,13 +1279,15 @@ static void status_post_select(struct sched *s, struct task *t)
        st->last_status_read = *now;
 out:
        start_stop_decoders();
+       return 0;
 }
 
 static void init_status_task(struct status_task *st)
 {
        memset(st, 0, sizeof(struct status_task));
        st->task.pre_select = status_pre_select;
-       st->task.post_select = status_post_select;
+       st->task.new_post_select = status_post_select;
+       st->task.post_select = NULL;
        st->sa_time_diff_sign = 1;
        st->clock_diff_count = conf.clock_diff_count_arg;
        st->current_audio_format_num = -1;