mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'remotes/spice/tags/pull-spice-20150611-1' into staging
spice: fix segfault in qemu_spice_create_update, ui_info tweaks. # gpg: Signature made Thu Jun 11 08:48:49 2015 BST using RSA key ID D3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" * remotes/spice/tags/pull-spice-20150611-1: spice: ui_info tweaks spice-display: fix segfault in qemu_spice_create_update Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
+13
-13
@@ -199,7 +199,7 @@ static void qemu_spice_create_update(SimpleSpiceDisplay *ssd)
|
||||
static const int blksize = 32;
|
||||
int blocks = (surface_width(ssd->ds) + blksize - 1) / blksize;
|
||||
int dirty_top[blocks];
|
||||
int y, yoff, x, xoff, blk, bw;
|
||||
int y, yoff1, yoff2, x, xoff, blk, bw;
|
||||
int bpp = surface_bytes_per_pixel(ssd->ds);
|
||||
uint8_t *guest, *mirror;
|
||||
|
||||
@@ -214,13 +214,14 @@ static void qemu_spice_create_update(SimpleSpiceDisplay *ssd)
|
||||
guest = surface_data(ssd->ds);
|
||||
mirror = (void *)pixman_image_get_data(ssd->mirror);
|
||||
for (y = ssd->dirty.top; y < ssd->dirty.bottom; y++) {
|
||||
yoff = y * surface_stride(ssd->ds);
|
||||
yoff1 = y * surface_stride(ssd->ds);
|
||||
yoff2 = y * pixman_image_get_stride(ssd->mirror);
|
||||
for (x = ssd->dirty.left; x < ssd->dirty.right; x += blksize) {
|
||||
xoff = x * bpp;
|
||||
blk = x / blksize;
|
||||
bw = MIN(blksize, ssd->dirty.right - x);
|
||||
if (memcmp(guest + yoff + xoff,
|
||||
mirror + yoff + xoff,
|
||||
if (memcmp(guest + yoff1 + xoff,
|
||||
mirror + yoff2 + xoff,
|
||||
bw * bpp) == 0) {
|
||||
if (dirty_top[blk] != -1) {
|
||||
QXLRect update = {
|
||||
@@ -660,7 +661,10 @@ static int interface_client_monitors_config(QXLInstance *sin,
|
||||
{
|
||||
SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl);
|
||||
QemuUIInfo info;
|
||||
int rc;
|
||||
|
||||
if (!dpy_ui_info_supported(ssd->dcl.con)) {
|
||||
return 0; /* == not supported by guest */
|
||||
}
|
||||
|
||||
if (!mc) {
|
||||
return 1;
|
||||
@@ -675,14 +679,10 @@ static int interface_client_monitors_config(QXLInstance *sin,
|
||||
info.width = mc->monitors[0].width;
|
||||
info.height = mc->monitors[0].height;
|
||||
}
|
||||
rc = dpy_set_ui_info(ssd->dcl.con, &info);
|
||||
dprint(1, "%s/%d: size %dx%d, rc %d <--- ==========================\n",
|
||||
__func__, ssd->qxl.id, info.width, info.height, rc);
|
||||
if (rc != 0) {
|
||||
return 0; /* == not supported by guest */
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
dpy_set_ui_info(ssd->dcl.con, &info);
|
||||
dprint(1, "%s/%d: size %dx%d\n", __func__, ssd->qxl.id,
|
||||
info.width, info.height);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const QXLInterface dpy_interface = {
|
||||
|
||||
Reference in New Issue
Block a user