s->wns = NULL;
}
-static void _close_filters(struct slot_info *s)
+static void close_filters(struct slot_info *s)
{
int i;
struct audio_format_info *a = afi + s->format;
return;
for (i = 0; i < a->num_filters; i++) {
struct filter_node *fn = s->fns + i;
- struct filter *f = filters + fn->filter_num;
+ struct filter *f;
+ if (!fn)
+ continue;
+ f = filters + fn->filter_num;
f->close(fn);
btr_free_node(fn->btrn);
}
* this period begins to avoid restarting the receiver that
* belongs to the file just completed.
*/
- if (stat_task->server_stream_start.tv_sec != 0)
+ if (stat_task->server_stream_start.tv_sec != 0) {
sched_request_timeout_ms(100, s);
+ return -1;
+ }
}
if (tv_diff(now, &afi[cafn].restart_barrier, &diff) < 0) {
if (tv_diff(&s->timeout, &diff, NULL) > 0)
- s->timeout = diff;
+ sched_request_timeout(&diff, s);
else
sched_min_delay(s);
return -1;
for (i = 0; i < a->num_filters; i++)
if (s->fns && s->fns[i].task.error != -E_TASK_UNREGISTERED)
return false;
- for (i = 0; i < a->num_writers; i++)
- if (s->wns && s->wns[i].task.error != -E_TASK_UNREGISTERED)
+ if (a->num_writers > 0) {
+ for (i = 0; i < a->num_writers; i++)
+ if (s->wns && s->wns[i].task.error != -E_TASK_UNREGISTERED)
+ return false;
+ } else {
+ if (s->wns && s->wns[0].task.error != -E_TASK_UNREGISTERED)
return false;
+ }
PARA_INFO_LOG("closing slot %d\n", slot_num);
close_writers(s);
- _close_filters(s);
+ close_filters(s);
close_receiver(slot_num);
clear_slot(slot_num);
return true;