Il giorno mer 28 feb 2024 alle ore 08:41 Vivek Kasireddy <vivek.kasire...@intel.com> ha scritto: > > We do not want to stop a stream associated with gl_draw as a result > of timeout because we may not get another opportunity to create a > new stream if the current one gets stopped. However, when the > stream does get stopped for other reasons, we need to clear the > gl_draw_stream pointer associated with the relevant DC. > > v2: (suggestions from Frediano) > - Don't stop the stream regardless of whether gl_draw is ongoing > or not > > Cc: Frediano Ziglio <fredd...@gmail.com> > Cc: Gerd Hoffmann <kra...@redhat.com> > Cc: Marc-André Lureau <marcandre.lur...@redhat.com> > Cc: Dongwon Kim <dongwon....@intel.com> > Signed-off-by: Vivek Kasireddy <vivek.kasire...@intel.com> > --- > server/video-stream.cpp | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/server/video-stream.cpp b/server/video-stream.cpp > index 5d4e2690..a7233459 100644 > --- a/server/video-stream.cpp > +++ b/server/video-stream.cpp > @@ -116,6 +116,10 @@ void video_stream_stop(DisplayChannel *display, > VideoStream *stream) > } > dcc->pipe_add(video_stream_destroy_item_new(stream_agent)); > video_stream_agent_stats_print(stream_agent); > + > + if (stream == display->priv->gl_draw_stream) { > + display->priv->gl_draw_stream = nullptr; > + } > } > display->priv->streams_size_total -= stream->width * stream->height; > ring_remove(&stream->link); > @@ -1016,7 +1020,8 @@ void video_stream_timeout(DisplayChannel *display) > while (item) { > VideoStream *stream = SPICE_CONTAINEROF(item, VideoStream, link); > item = ring_next(ring, item); > - if (now >= (stream->last_time + RED_STREAM_TIMEOUT)) { > + if (now >= (stream->last_time + RED_STREAM_TIMEOUT) && > + stream != display->priv->gl_draw_stream) { > detach_video_stream_gracefully(display, stream, nullptr); > video_stream_stop(display, stream); > }
Acked Frediano