diff mbox series

[25/67] ui/console: allocate ui_timer in QemuConsole

Message ID 20230830093843.3531473-26-marcandre.lureau@redhat.com
State New
Headers show
Series Make pixman an optional dependency | expand

Commit Message

Marc-André Lureau Aug. 30, 2023, 9:37 a.m. UTC
From: Marc-André Lureau <marcandre.lureau@redhat.com>

Although at this point only QemuGraphicConsole have hw_ops that
implements ui_info() callback, it makes sense to keep the code in the
base QemuConsole, to simplify conditions for the caller.

As of now, the code didn't reach a NULL timer because dpy_set_ui_info()
checks if dpy_ui_info_supported() (hw_ops->ui_info != NULL), which is
false for text_console_ops. This is a bit fragile, let simply allocate
and free the timer in the base class.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 ui/console.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Daniel P. Berrangé Sept. 1, 2023, 2:24 p.m. UTC | #1
On Wed, Aug 30, 2023 at 01:37:59PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Although at this point only QemuGraphicConsole have hw_ops that
> implements ui_info() callback, it makes sense to keep the code in the
> base QemuConsole, to simplify conditions for the caller.
> 
> As of now, the code didn't reach a NULL timer because dpy_set_ui_info()
> checks if dpy_ui_info_supported() (hw_ops->ui_info != NULL), which is
> false for text_console_ops. This is a bit fragile, let simply allocate
> and free the timer in the base class.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  ui/console.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


With regards,
Daniel
diff mbox series

Patch

diff --git a/ui/console.c b/ui/console.c
index a9a922b6e3..8c4a2c83fa 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -197,6 +197,7 @@  static bool displaychangelistener_has_dmabuf(DisplayChangeListener *dcl);
 static bool console_compatible_with(QemuConsole *con,
                                     DisplayChangeListener *dcl, Error **errp);
 static QemuConsole *qemu_graphic_console_lookup_unused(void);
+static void dpy_set_ui_info_timer(void *opaque);
 
 static void gui_update(void *opaque)
 {
@@ -1334,6 +1335,9 @@  qemu_console_register(QemuConsole *c)
 static void
 qemu_console_finalize(Object *obj)
 {
+    QemuConsole *c = QEMU_CONSOLE(obj);
+
+    g_clear_pointer(&c->ui_timer, timer_free);
     /* TODO: should unregister from consoles and free itself  */
 }
 
@@ -1367,6 +1371,8 @@  qemu_console_init(Object *obj)
     qemu_co_queue_init(&c->dump_queue);
     c->ds = ds;
     c->window_id = -1;
+    c->ui_timer = timer_new_ms(QEMU_CLOCK_REALTIME,
+                               dpy_set_ui_info_timer, c);
     qemu_console_register(c);
 }
 
@@ -2193,8 +2199,6 @@  QemuConsole *graphic_console_init(DeviceState *dev, uint32_t head,
     } else {
         trace_console_gfx_new();
         s = (QemuConsole *)object_new(TYPE_QEMU_GRAPHIC_CONSOLE);
-        s->ui_timer = timer_new_ms(QEMU_CLOCK_REALTIME,
-                                   dpy_set_ui_info_timer, s);
     }
     s->head = head;
     graphic_console_set_hwops(s, hw_ops, opaque);