From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>, Anthony Liguori <aliguori@amazon.com>
Subject: [Qemu-devel] [PULL for-2.1 2/2] vnc update fix
Date: Thu, 24 Jul 2014 10:28:06 +0200 [thread overview]
Message-ID: <1406190486-16026-3-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1406190486-16026-1-git-send-email-kraxel@redhat.com>
We need to remember has_updates for each vnc client. Otherwise it might
happen that vnc_update_client(has_dirty=1) takes the first exit due to
output buffers not being flushed yet and subsequent calls with
has_dirty=0 take the second exit, wrongly assuming there is nothing to
do because the work defered in the first call is ignored.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Peter Lieven <pl@kamp.de>
---
ui/vnc.c | 4 +++-
ui/vnc.h | 1 +
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/ui/vnc.c b/ui/vnc.c
index 06d6ca0..f8d9b7d 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -887,6 +887,7 @@ static int find_and_clear_dirty_height(struct VncState *vs,
static int vnc_update_client(VncState *vs, int has_dirty, bool sync)
{
+ vs->has_dirty += has_dirty;
if (vs->need_update && vs->csock != -1) {
VncDisplay *vd = vs->vd;
VncJob *job;
@@ -898,7 +899,7 @@ static int vnc_update_client(VncState *vs, int has_dirty, bool sync)
/* kernel send buffers are full -> drop frames to throttle */
return 0;
- if (!has_dirty && !vs->audio_cap && !vs->force_update)
+ if (!vs->has_dirty && !vs->audio_cap && !vs->force_update)
return 0;
/*
@@ -941,6 +942,7 @@ static int vnc_update_client(VncState *vs, int has_dirty, bool sync)
vnc_jobs_join(vs);
}
vs->force_update = 0;
+ vs->has_dirty = 0;
return n;
}
diff --git a/ui/vnc.h b/ui/vnc.h
index 8f582fd..334de9d 100644
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -263,6 +263,7 @@ struct VncState
VncDisplay *vd;
int need_update;
int force_update;
+ int has_dirty;
uint32_t features;
int absolute;
int last_x;
--
1.8.3.1
next prev parent reply other threads:[~2014-07-24 8:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-24 8:28 [Qemu-devel] [PULL for-2.1 0/2] vnc: fix two vnc update issues Gerd Hoffmann
2014-07-24 8:28 ` [Qemu-devel] [PULL for-2.1 1/2] fix full frame updates for VNC clients Gerd Hoffmann
2014-07-24 12:30 ` Andreas Färber
2014-07-24 13:45 ` Stephan Kulow
2014-07-24 13:57 ` Andreas Färber
2014-07-24 8:28 ` Gerd Hoffmann [this message]
2014-07-24 11:48 ` [Qemu-devel] [PULL for-2.1 0/2] vnc: fix two vnc update issues Peter Maydell
2014-07-24 12:20 ` Andreas Färber
2014-07-24 14:10 ` Gerd Hoffmann
2014-07-24 14:22 ` Peter Maydell
2014-07-25 7:45 ` Gerd Hoffmann
2014-07-25 11:52 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1406190486-16026-3-git-send-email-kraxel@redhat.com \
--to=kraxel@redhat.com \
--cc=aliguori@amazon.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).