From: Andre Noll Date: Sun, 7 Mar 2010 15:34:25 +0000 (+0100) Subject: setup_next_fec_group(): Return early on eof. X-Git-Tag: v0.4.2~13^2~1 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=c52d8d08b47bc556cb5149bbb376d7d27a0b7cbc setup_next_fec_group(): Return early on eof. 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. --- diff --git a/vss.c b/vss.c index c6e40533..b63a1fcb 100644 --- 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)