qxl: fix spice+sdl no cursor regression

Submitted by Alon Levy on Feb. 22, 2012, 9:36 a.m.

Details

Message ID 1329903416-9861-1-git-send-email-alevy@redhat.com
State New
Headers show

Commit Message

Alon Levy Feb. 22, 2012, 9:36 a.m.
regression introduced by 075360945860ad9bdd491921954b383bf762b0e5,

Reported-by: Fabiano FidĂȘncio <fabiano@fidencio.org>
Signed-off-by: Alon Levy <alevy@redhat.com>
---

Thanks for the report, this fixes the problem for me, the problem with
reverting the commit you proposed is that it would reintroduce dropping of the
global mutex in spice code.

 hw/qxl.c           |    2 ++
 ui/spice-display.c |   23 ++++++++++++++---------
 ui/spice-display.h |    1 +
 3 files changed, 17 insertions(+), 9 deletions(-)

Patch hide | download patch | download mbox

diff --git a/hw/qxl.c b/hw/qxl.c
index 87ad49a..6f8351c 100644
--- a/hw/qxl.c
+++ b/hw/qxl.c
@@ -1545,6 +1545,8 @@  static void display_refresh(struct DisplayState *ds)
 {
     if (qxl0->mode == QXL_MODE_VGA) {
         qemu_spice_display_refresh(&qxl0->ssd);
+    } else {
+        qemu_spice_cursor_refresh_unlocked(&qxl0->ssd);
     }
 }
 
diff --git a/ui/spice-display.c b/ui/spice-display.c
index 6c302a3..c6e61d8 100644
--- a/ui/spice-display.c
+++ b/ui/spice-display.c
@@ -317,16 +317,8 @@  void qemu_spice_display_resize(SimpleSpiceDisplay *ssd)
     ssd->notify++;
 }
 
-void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd)
+void qemu_spice_cursor_refresh_unlocked(SimpleSpiceDisplay *ssd)
 {
-    dprint(3, "%s:\n", __FUNCTION__);
-    vga_hw_update();
-
-    qemu_mutex_lock(&ssd->lock);
-    if (ssd->update == NULL) {
-        ssd->update = qemu_spice_create_update(ssd);
-        ssd->notify++;
-    }
     if (ssd->cursor) {
         ssd->ds->cursor_define(ssd->cursor);
         cursor_put(ssd->cursor);
@@ -337,6 +329,19 @@  void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd)
         ssd->mouse_x = -1;
         ssd->mouse_y = -1;
     }
+}
+
+void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd)
+{
+    dprint(3, "%s:\n", __func__);
+    vga_hw_update();
+
+    qemu_mutex_lock(&ssd->lock);
+    if (ssd->update == NULL) {
+        ssd->update = qemu_spice_create_update(ssd);
+        ssd->notify++;
+    }
+    qemu_spice_cursor_refresh_unlocked(ssd);
     qemu_mutex_unlock(&ssd->lock);
 
     if (ssd->notify) {
diff --git a/ui/spice-display.h b/ui/spice-display.h
index 5e52df9..a23bfc8 100644
--- a/ui/spice-display.h
+++ b/ui/spice-display.h
@@ -97,6 +97,7 @@  void qemu_spice_display_update(SimpleSpiceDisplay *ssd,
                                int x, int y, int w, int h);
 void qemu_spice_display_resize(SimpleSpiceDisplay *ssd);
 void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd);
+void qemu_spice_cursor_refresh_unlocked(SimpleSpiceDisplay *ssd);
 
 void qemu_spice_add_memslot(SimpleSpiceDisplay *ssd, QXLDevMemSlot *memslot,
                             qxl_async_io async);