]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - audiod.c
audiod: Don't open the receiver too early.
[paraslash.git] / audiod.c
index 456813b14a5a64d9b642dedbd261a2bec25285f8..d12b65e5a49193346adc798be3b28293e16bb99c 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -340,8 +340,12 @@ static void close_receiver(int slot_num)
 
 static void writer_cleanup(struct writer_node *wn)
 {
-       struct writer *w = writers + wn->writer_num;
+       struct writer *w;
 
+       if (!wn)
+               return;
+       w = writers + wn->writer_num;
+       PARA_INFO_LOG("closing %s\n", writer_names[wn->writer_num]);
        w->close(wn);
        btr_free_node(wn->btrn);
 }
@@ -372,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);
        }
@@ -593,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;