[Spice-devel] [client v3 2/4] streaming: Don't crash if no frame was received before closing the stream

Victor Toso lists at victortoso.com
Fri Aug 12 12:31:45 UTC 2016


Hi,

On Thu, Aug 11, 2016 at 12:21:59PM +0200, Francois Gouget wrote:
> Signed-off-by: Francois Gouget <fgouget at codeweavers.com>

Acked-by: Victor Toso <victortoso at redhat.com>

> ---
> 
> This could potentially happen if we detect a stream right before it 
> ends. But it's mostly useful for the next patch.
> 
>  src/channel-display.c | 39 ++++++++++++++++++++-------------------
>  1 file changed, 20 insertions(+), 19 deletions(-)
> 
> diff --git a/src/channel-display.c b/src/channel-display.c
> index b4c9ec0..22c54f2 100644
> --- a/src/channel-display.c
> +++ b/src/channel-display.c
> @@ -1434,8 +1434,6 @@ static void destroy_stream(SpiceChannel *channel, int id)
>  {
>      SpiceDisplayChannelPrivate *c = SPICE_DISPLAY_CHANNEL(channel)->priv;
>      display_stream *st;
> -    guint64 drops_duration_total = 0;
> -    guint32 num_out_frames;
>      int i;
>  
>      g_return_if_fail(c != NULL);
> @@ -1446,20 +1444,22 @@ static void destroy_stream(SpiceChannel *channel, int id)
>      if (!st)
>          return;
>  
> -    num_out_frames = st->num_input_frames - st->arrive_late_count - st->num_drops_on_playback;
> -    CHANNEL_DEBUG(channel, "%s: id=%d #in-frames=%u out/in=%.2f "
> -        "#drops-on-receive=%u avg-late-time(ms)=%.2f "
> -        "#drops-on-playback=%u", __FUNCTION__,
> -        id,
> -        st->num_input_frames,
> -        num_out_frames / (double)st->num_input_frames,
> -        st->arrive_late_count,
> -        st->arrive_late_count ? st->arrive_late_time / ((double)st->arrive_late_count): 0,
> -        st->num_drops_on_playback);
> -    if (st->num_drops_seqs) {
> -        CHANNEL_DEBUG(channel, "%s: #drops-sequences=%u ==>", __FUNCTION__, st->num_drops_seqs);
> -    }
> -    for (i = 0; i < st->num_drops_seqs; i++) {
> +    if (st->num_input_frames > 0) {
> +        guint64 drops_duration_total = 0;
> +        guint32 num_out_frames = st->num_input_frames - st->arrive_late_count - st->num_drops_on_playback;
> +        CHANNEL_DEBUG(channel, "%s: id=%d #in-frames=%u out/in=%.2f "
> +            "#drops-on-receive=%u avg-late-time(ms)=%.2f "
> +            "#drops-on-playback=%u", __FUNCTION__,
> +            id,
> +            st->num_input_frames,
> +            num_out_frames / (double)st->num_input_frames,
> +            st->arrive_late_count,
> +            st->arrive_late_count ? st->arrive_late_time / ((double)st->arrive_late_count): 0,
> +            st->num_drops_on_playback);
> +        if (st->num_drops_seqs) {
> +            CHANNEL_DEBUG(channel, "%s: #drops-sequences=%u ==>", __FUNCTION__, st->num_drops_seqs);
> +        }
> +        for (i = 0; i < st->num_drops_seqs; i++) {
>              drops_sequence_stats *stats = &g_array_index(st->drops_seqs_stats_arr,
>                                                           drops_sequence_stats,
>                                                           i);
> @@ -1468,9 +1468,10 @@ static void destroy_stream(SpiceChannel *channel, int id)
>                                     stats->len,
>                                     stats->start_mm_time - st->first_frame_mm_time,
>                                     stats->duration);
> -    }
> -    if (st->num_drops_seqs) {
> -        CHANNEL_DEBUG(channel, "%s: drops-total-duration=%"G_GUINT64_FORMAT" ==>", __FUNCTION__, drops_duration_total);
> +        }
> +        if (st->num_drops_seqs) {
> +            CHANNEL_DEBUG(channel, "%s: drops-total-duration=%"G_GUINT64_FORMAT" ==>", __FUNCTION__, drops_duration_total);
> +        }
>      }
>  
>      g_array_free(st->drops_seqs_stats_arr, TRUE);
> -- 
> 2.8.1
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list