Hi On Thu, Jun 11, 2026 at 12:01 PM Akihiko Odaki <[email protected]> wrote: > > On 2026/06/08 16:16, Marc-André Lureau wrote: > > Reported-by: Akihiko Odaki <[email protected]> > > Signed-off-by: Marc-André Lureau <[email protected]> > > --- > > ui/dbus-console.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/ui/dbus-console.c b/ui/dbus-console.c > > index 0813a08f85e..f784ccbe572 100644 > > --- a/ui/dbus-console.c > > +++ b/ui/dbus-console.c > > @@ -53,6 +53,7 @@ struct _DBusDisplayConsole { > > guint last_x; > > guint last_y; > > Notifier mouse_mode_notifier; > > + QEMUPutLEDEntry *kbd_leds_updated; > > }; > > > > G_DEFINE_TYPE(DBusDisplayConsole, > > @@ -152,6 +153,7 @@ dbus_display_console_dispose(GObject *object) > > > > qemu_console_unregister_listener(&ddc->dcl); > > qemu_remove_mouse_mode_change_notifier(&ddc->mouse_mode_notifier); > > + qemu_remove_led_event_handler(ddc->kbd_leds_updated); > > It is better to avoid call qemu_remove_led_event_handler() here because > GObject.ObjectClass.dispose is documented as it may be run multiple > times and qemu_remove_led_event_handler() will cause double free if that > happens. >
right, I will use g_clear_pointer (remove NULL is guarded) > Regards, > Akihiko Odaki > > > g_clear_object(&ddc->iface_touch); > > g_clear_object(&ddc->iface_mouse); > > g_clear_object(&ddc->iface_kbd); > > @@ -578,7 +580,8 @@ dbus_display_console_new(DBusDisplay *display, > > QemuConsole *con) > > > > ddc->kbd = qkbd_state_init(con); > > ddc->iface_kbd = qemu_dbus_display1_keyboard_skeleton_new(); > > - qemu_add_led_event_handler(dbus_kbd_qemu_leds_updated, ddc); > > + ddc->kbd_leds_updated = qemu_add_led_event_handler( > > + dbus_kbd_qemu_leds_updated, ddc); > > g_object_connect(ddc->iface_kbd, > > "swapped-signal::handle-press", dbus_kbd_press, ddc, > > "swapped-signal::handle-release", dbus_kbd_release, ddc, > > > >
