vss: Avoid assertion "i == g->num_header_slices - 1".
authorAndre Noll <maan@systemlinux.org>
Sun, 1 Sep 2013 15:54:25 +0000 (15:54 +0000)
committerAndre Noll <maan@systemlinux.org>
Sun, 22 Sep 2013 00:10:27 +0000 (02:10 +0200)
This fixes a very old bug in the timing code for fec slices. Depending
on the number of bytes to submit and on the number of slices of the
current fec group it may happen that we reserve more slices than
needed for the audio file header. This is not a problem per se, but the
above assertion hits in this case and aborts para_server.

Fix this by removing the assertion, and make sure that all reserved
header slices are properly initialized.

vss.c

diff --git a/vss.c b/vss.c
index aec357a..06707d6 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -565,8 +565,14 @@ static int setup_next_fec_group(struct fec_client *fc, struct vss_task *vsst)
                if (payload_size < g->slice_bytes)
                        memset(fc->extra_header_buf + payload_size, 0,
                                g->slice_bytes - payload_size);
-               fc->src_data[i] = fc->extra_header_buf;
-               assert(i == g->num_header_slices - 1);
+               /*
+                * There might be more than one header slice to fill although
+                * only the first one will be used. Set all header slices to
+                * our extra buffer.
+                */
+               while (i < g->num_header_slices)
+                       fc->src_data[i++] = fc->extra_header_buf;
+               break; /* we don't want i to be increased. */
        }
 
        /*