[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [qemu-xen-unstable] fix vnc screen corruption bugs and viewer exits
commit 99a5a9155284ab47eda2be738be0115aa97ce0ff Author: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Date: Tue Aug 4 15:35:46 2009 +0100 fix vnc screen corruption bugs and viewer exits I have been having problems with display corruption using raw encoding. I have also been having issues with the vncviewer client exiting with "rect too big". These problems appear when there are rapid changes to the framebuffer contents. [I've been using "find /" in my tests to generate a lot of text output.] The root cause of both problems appears to be the changing of the underlying framebuffer data during the creation of the update. [Hextile makes multiple passes over the data and gets badly confused if the data changes..] The attached patch pulls the pixel data from the "stable" old_data buffer rather than directly from the (changing) display surface. Submitted-by: Andrew Thomas <andrew.thomas@xxxxxxxxxx> Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- vnc.c | 2 +- vnchextile.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vnc.c b/vnc.c index f8606cb..702ee5d 100644 --- a/vnc.c +++ b/vnc.c @@ -499,7 +499,7 @@ static void send_framebuffer_update_raw(VncState *vs, int x, int y, int w, int h vnc_framebuffer_update(vs, x, y, w, h, 0); - row = ds_get_data(vs->ds) + y * ds_get_linesize(vs->ds) + x * ds_get_bytes_per_pixel(vs->ds); + row = vs->old_data + y * ds_get_linesize(vs->ds) + x * ds_get_bytes_per_pixel(vs->ds); for (i = 0; i < h; i++) { vs->write_pixels(vs, row, w * ds_get_bytes_per_pixel(vs->ds)); row += ds_get_linesize(vs->ds); diff --git a/vnchextile.h b/vnchextile.h index f3fdfb4..1455886 100644 --- a/vnchextile.h +++ b/vnchextile.h @@ -13,7 +13,7 @@ static void CONCAT(send_hextile_tile_, NAME)(VncState *vs, void *last_fg_, int *has_bg, int *has_fg) { - uint8_t *row = (ds_get_data(vs->ds) + y * ds_get_linesize(vs->ds) + x * ds_get_bytes_per_pixel(vs->ds)); + uint8_t *row = (vs->old_data + y * ds_get_linesize(vs->ds) + x * ds_get_bytes_per_pixel(vs->ds)); pixel_t *irow = (pixel_t *)row; int j, i; pixel_t *last_bg = (pixel_t *)last_bg_; -- generated by git-patchbot for /home/xen/git/qemu-xen-unstable.git _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |