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));
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;
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;
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");
}
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);
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");
}
/* 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);
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;