Re: [PULL v2 08/18] ui: keep current cursor with QemuConsole

2023-03-17 Thread Daniel P . Berrangé
On Tue, Mar 14, 2023 at 12:01:24AM +0400, marcandre.lur...@redhat.com wrote:
> From: Marc-André Lureau 
> 
> Keeping the current cursor around is useful, not only for VNC, but for
> other displays. Let's move it down, see the following patches for other
> usages.
> 
> Signed-off-by: Marc-André Lureau 
> Reviewed-by: Daniel P. Berrangé 
> ---
>  include/ui/console.h | 1 +
>  ui/vnc.h | 1 -
>  ui/console.c | 8 
>  ui/vnc.c | 7 ++-
>  4 files changed, 11 insertions(+), 6 deletions(-)

Unfortunately this commit appears to have casued a regresion leading
to a SEGV crash in VNC reported by a user:

  https://gitlab.com/qemu-project/qemu/-/issues/1548


With regards,
Daniel
-- 
|: https://berrange.com  -o-https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o-https://fstop138.berrange.com :|
|: https://entangle-photo.org-o-https://www.instagram.com/dberrange :|




[PULL v2 08/18] ui: keep current cursor with QemuConsole

2023-03-13 Thread marcandre . lureau
From: Marc-André Lureau 

Keeping the current cursor around is useful, not only for VNC, but for
other displays. Let's move it down, see the following patches for other
usages.

Signed-off-by: Marc-André Lureau 
Reviewed-by: Daniel P. Berrangé 
---
 include/ui/console.h | 1 +
 ui/vnc.h | 1 -
 ui/console.c | 8 
 ui/vnc.c | 7 ++-
 4 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 0b01df947e..2a8fab091f 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -459,6 +459,7 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState 
*dev, uint32_t head);
 QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
 uint32_t head, Error **errp);
 QemuConsole *qemu_console_lookup_unused(void);
+QEMUCursor *qemu_console_get_cursor(QemuConsole *con);
 bool qemu_console_is_visible(QemuConsole *con);
 bool qemu_console_is_graphic(QemuConsole *con);
 bool qemu_console_is_fixedsize(QemuConsole *con);
diff --git a/ui/vnc.h b/ui/vnc.h
index a60fb13115..757fa83044 100644
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -159,7 +159,6 @@ struct VncDisplay
 QKbdState *kbd;
 QemuMutex mutex;
 
-QEMUCursor *cursor;
 int cursor_msize;
 uint8_t *cursor_mask;
 
diff --git a/ui/console.c b/ui/console.c
index 98b701f5a3..0dccbdd4be 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -94,6 +94,7 @@ struct QemuConsole {
 uint32_t head;
 QemuUIInfo ui_info;
 QEMUTimer *ui_timer;
+QEMUCursor *cursor;
 const GraphicHwOps *hw_ops;
 void *hw;
 
@@ -1923,6 +1924,8 @@ void dpy_cursor_define(QemuConsole *con, QEMUCursor 
*cursor)
 DisplayState *s = con->ds;
 DisplayChangeListener *dcl;
 
+cursor_unref(con->cursor);
+con->cursor = cursor_ref(cursor);
 if (!qemu_console_is_visible(con)) {
 return;
 }
@@ -2288,6 +2291,11 @@ QemuConsole *qemu_console_lookup_unused(void)
 return NULL;
 }
 
+QEMUCursor *qemu_console_get_cursor(QemuConsole *con)
+{
+return con->cursor;
+}
+
 bool qemu_console_is_visible(QemuConsole *con)
 {
 return (con == active_console) || (con->dcls > 0);
diff --git a/ui/vnc.c b/ui/vnc.c
index 8aec5d751e..bbd8b6baae 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -988,10 +988,10 @@ static void vnc_mouse_set(DisplayChangeListener *dcl,
 
 static int vnc_cursor_define(VncState *vs)
 {
-QEMUCursor *c = vs->vd->cursor;
+QEMUCursor *c = qemu_console_get_cursor(vs->vd->dcl.con);
 int isize;
 
-if (!vs->vd->cursor) {
+if (!c) {
 return -1;
 }
 
@@ -1029,10 +1029,7 @@ static void vnc_dpy_cursor_define(DisplayChangeListener 
*dcl,
 VncDisplay *vd = container_of(dcl, VncDisplay, dcl);
 VncState *vs;
 
-cursor_unref(vd->cursor);
 g_free(vd->cursor_mask);
-
-vd->cursor = cursor_ref(vd->cursor);
 vd->cursor_msize = cursor_get_mono_bpl(c) * c->height;
 vd->cursor_mask = g_malloc0(vd->cursor_msize);
 cursor_get_mono_mask(c, 0, vd->cursor_mask);
-- 
2.39.2