audiod: Don't open the receiver too early.
[paraslash.git] / audiod.c
index 322ce3be64a3ccc1030b1c7de0018805813ebcc9..d12b65e5a49193346adc798be3b28293e16bb99c 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -376,8 +376,11 @@ static void _close_filters(struct slot_info *s)
                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);
        }
@@ -597,12 +600,14 @@ static int open_current_receiver(struct sched *s)
                 * 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;