]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - audiod.c
audiod: Fix a bug in try_to_close_slot() for default config.
[paraslash.git] / audiod.c
index 322ce3be64a3ccc1030b1c7de0018805813ebcc9..a11835f287605e96a5142094fae4a8e8db03720d 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;
@@ -1056,9 +1061,14 @@ static bool try_to_close_slot(int slot_num)
        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);