File 0270-ui-correctly-reset-framebuffer-upda.patch of Package qemu.19799
From: "Daniel P. Berrange" <berrange@redhat.com>
Date: Mon, 18 Dec 2017 19:12:22 +0000
Subject: ui: correctly reset framebuffer update state after processing dirty
regions
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
According to the RFB protocol, a client sends one or more framebuffer update
requests to the server. The server can reply with a single framebuffer update
response, that covers all previously received requests. Once the client has
read this update from the server, it may send further framebuffer update
requests to monitor future changes. The client is free to delay sending the
framebuffer update request if it needs to throttle the amount of data it is
reading from the server.
The QEMU VNC server, however, has never correctly handled the framebuffer
update requests. Once QEMU has received an update request, it will continue to
send client updates forever, even if the client hasn't asked for further
updates. This prevents the client from throttling back data it gets from the
server. This change fixes the flawed logic such that after a set of updates are
sent out, QEMU waits for a further update request before sending more data.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-id: 20171218191228.31018-8-berrange@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
(cherry picked from commit 728a7ac95484a7ba5e624ccbac4c1326571576b0)
[LY: BSC#1073489]
Signed-off-by: Liang Yan <lyan@suse.com>
---
ui/vnc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/vnc.c b/ui/vnc.c
index 52533a4c21340498552afc190452..b2b35aa5c26f8942a510326646cf 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1006,7 +1006,7 @@ static int vnc_update_client(VncState *vs, int has_dirty)
}
vnc_job_push(job);
- vs->update = VNC_STATE_UPDATE_INCREMENTAL;
+ vs->update = VNC_STATE_UPDATE_NONE;
vs->has_dirty = 0;
return n;
}