From f861d2922d522aedced1e13830550a6c822d41a5 Mon Sep 17 00:00:00 2001 From: Francois Gouget Date: Tue, 22 Nov 2016 18:01:48 +0100 Subject: [PATCH] streaming: Stop streaming if the client reports a streaming error By removing the stream's video encoder we force the stream to send future frames using the fallback code, that is as regular screen updates. However note that we keep the stream object: we have to. Otherwise future frames would trigger the creation of a new stream object with a new video encoder which would again try to stream the video and fail again and again. Signed-off-by: Francois Gouget Acked-by: Christophe Fergeau Reviewed-by: Victor Toso --- server/dcc.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/server/dcc.c b/server/dcc.c index e9b438f0..cf5f44c5 100644 --- a/server/dcc.c +++ b/server/dcc.c @@ -1059,6 +1059,15 @@ static int dcc_handle_stream_report(DisplayChannelClient *dcc, return TRUE; } + if (report->num_frames == 0 && report->num_drops == UINT_MAX) { + spice_warning("stream_report: the client does not support stream %u", + report->stream_id); + /* Stop streaming the video so the client can see it */ + agent->video_encoder->destroy(agent->video_encoder); + agent->video_encoder = NULL; + return TRUE; + } + if (report->unique_id != agent->report_id) { spice_warning("stream_report: unique id mismatch: local (%u) != msg (%u) " "The old stream was probably replaced by a new one",