On 2019/3/5 21:09, Gerd Hoffmann wrote: > vnc aborts display update jobs on video mode switches and page flips. > That can cause vnc update stalls in case an unfinished vnc job gets > aborted. The vnc client will never receive the requested update then. > Fix that by copying the state from job_update back to update in that > case. > > Reports complain about stalls with two or more clients being connected > at the same time, on some but not all connections. I suspect it can > also happen with a single connection, multiple connections only make > this more much likely to happen. > > Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1662260 > Reported-by: Ying Fang <fangyi...@huawei.com> > Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
Reviewed-by: Ying Fang <fangyi...@huawei.com> > --- > ui/vnc.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/ui/vnc.c b/ui/vnc.c > index da4a21d4ce94..2f2ab62fcf71 100644 > --- a/ui/vnc.c > +++ b/ui/vnc.c > @@ -700,6 +700,12 @@ static void vnc_abort_display_jobs(VncDisplay *vd) > } > QTAILQ_FOREACH(vs, &vd->clients, next) { > vnc_lock_output(vs); > + if (vs->update == VNC_STATE_UPDATE_NONE && > + vs->job_update != VNC_STATE_UPDATE_NONE) { > + /* job aborted before completion */ > + vs->update = vs->job_update; > + vs->job_update = VNC_STATE_UPDATE_NONE; > + } > vs->abort = false; > vnc_unlock_output(vs); > } >