if (f->close)
f->close(fn);
btr_remove_node(&fn->btrn);
+ task_reap(&fn->task);
}
free(s->fns);
s->fns = NULL;
s->fns = para_calloc(nf * sizeof(struct filter_node));
parent = s->receiver_node->btrn;
for (i = 0; i < nf; i++) {
+ char buf[20];
struct filter *f = filters + a->filter_nums[i];
fn = s->fns + i;
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;
fn->btrn = btr_new_node(&(struct btr_node_description)
EMBRACE(.name = f->name, .parent = parent,
.handler = f->execute, .context = fn));
f->open(fn);
- register_task(&sched, &fn->task);
+ sprintf(buf, "%s (slot %d)", f->name, (int)(s - slot));
+ fn->task = task_register(&(struct task_info) {
+ .name = buf,
+ .pre_select = f->pre_select,
+ .post_select = f->post_select,
+ .context = fn,
+ }, &sched);
parent = fn->btrn;
PARA_NOTICE_LOG("%s filter %d/%d (%s) started in slot %d\n",
audio_formats[s->format], i, nf, f->name, (int)(s - slot));
- sprintf(fn->task.status, "%s (slot %d)", f->name, (int)(s - slot));
}
}
if (s->receiver_node && s->receiver_node->task->error >= 0)
return false;
for (i = 0; i < a->num_filters; i++)
- if (s->fns && s->fns[i].task.error >= 0)
+ if (s->fns && s->fns[i].task->error >= 0)
return false;
if (a->num_writers > 0) {
for (i = 0; i < a->num_writers; i++)