Commit bbcdeb62 authored by Gerd Hoffmann's avatar Gerd Hoffmann
Browse files

vnc: fix update stalls

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: default avatarYing Fang <fangying1@huawei.com>
Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
Reviewed-by: default avatarYing Fang <fangying1@huawei.com>
Message-id: 20190305130930.24516-1-kraxel@redhat.com
parent 459a707e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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);
    }