[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] vnc linesize



Hi Alex,
I think I have found the bug that causes the strange behaviour you are describing, but I have no way to be sure because I cannot test it on a ia64 machine. Could you please try the patch I am attaching (to be applied on top of the other one)?
Best Regards,

Stefano Stabellini

Alex Williamson wrote:
On Wed, 2008-03-19 at 17:24 +0000, Stefano Stabellini wrote:
Hi all,
the patch I am attaching enables buffer sharing for vnc when the linesize != width * depth.

Hi Stefano,

   I'm seeing some odd issues with this on ia64, see the attached
screenshot.  I'm using VNC, not SDL, and have specified opengl=0 in my
domain config file.  The left side of the screen is wrapped around
overtop of the right side of the screen.  The copy on the left side is
not updated unless I change the resolution the guest is running or force
the VNC client to manually refresh.  Updates are normal on the copy on
the right side of the screen.  Any ideas?  Thanks,


diff -r 491a3b62ae5b tools/ioemu/vnc.c
--- a/tools/ioemu/vnc.c Thu Mar 20 17:48:02 2008 +0000
+++ b/tools/ioemu/vnc.c Thu Mar 20 18:03:52 2008 +0000
@@ -370,16 +370,20 @@ static void vnc_dpy_resize(DisplayState 
     int o;
 
     if (!ds->shared_buf) {
+        ds->linesize = w * vs->depth;
         if (allocated)
-            ds->data = realloc(ds->data,  h * linesize);
+            ds->data = realloc(ds->data,  h * ds->linesize);
         else
-            ds->data = malloc(h * linesize);
+            ds->data = malloc(h * ds->linesize);
         allocated = 1;
-    } else if (allocated) {
-        free(ds->data);
-        allocated = 0;
-    }
-    vs->old_data = realloc(vs->old_data, h * linesize);
+    } else {
+        ds->linesize = linesize;
+        if (allocated) {
+            free(ds->data);
+            allocated = 0;
+        }
+    }
+    vs->old_data = realloc(vs->old_data, h * ds->linesize);
     vs->dirty_row = realloc(vs->dirty_row, h * sizeof(vs->dirty_row[0]));
     vs->update_row = realloc(vs->update_row, h * sizeof(vs->dirty_row[0]));
 
@@ -396,7 +400,6 @@ static void vnc_dpy_resize(DisplayState 
     size_changed = ds->width != w || ds->height != h;
     ds->width = w;
     ds->height = h;
-    ds->linesize = linesize;
     if (vs->csock != -1 && vs->has_resize && size_changed) {
         vs->width = ds->width;
         vs->height = ds->height;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.