setup_next_fec_group(): Return early on eof.
authorAndre Noll <maan@systemlinux.org>
Sun, 7 Mar 2010 15:34:25 +0000 (16:34 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 7 Mar 2010 15:34:25 +0000 (16:34 +0100)
The old code updated the group start via set_group_timing() even if the
end of the file was reached. This could confuse the logic in vss_send()
as it uses the goup start timestamp to find out whether all FEC clients
have sent all remaining slices.

Fix this by moving the check for the eof condition before the call to
set_group_timing() that updates the group start.

vss.c

diff --git a/vss.c b/vss.c
index c6e4053..b63a1fc 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -288,19 +288,20 @@ static int setup_next_fec_group(struct fec_client *fc, struct vss_task *vsst)
                g->num = 0;
                g->start = *now;
        } else {
+               struct timeval tmp;
+               if (g->first_chunk + g->num_chunks >= mmd->afd.afhi.chunks_total)
+                       return 0;
                /*
                 * Start and duration of this group depend only on the previous
                 * group. Compute the new group start as g->start += g->duration.
                 */
-               struct timeval tmp = g->start;
+               tmp = g->start;
                tv_add(&tmp, &g->duration, &g->start);
                k = fc->fcp->data_slices_per_group + fc->num_extra_slices;
                set_group_timing(fc, g);
                g->first_chunk += g->num_chunks;
                g->num++;
        }
-       if (g->first_chunk >= mmd->afd.afhi.chunks_total)
-               return 0;
        if (need_audio_header(fc, vsst)) {
                ret = num_slices(vsst->header_len, fc, &g->num_header_slices);
                if (ret < 0)