Add dbus_cleanup() to unparent the D-Bus display object, ensuring proper teardown before user_creatable_cleanup() runs.
Signed-off-by: Marc-André Lureau <[email protected]> --- ui/dbus-console.c | 3 +++ ui/dbus.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/ui/dbus-console.c b/ui/dbus-console.c index 0813a08f85e..0048951a7ab 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -151,6 +151,9 @@ dbus_display_console_dispose(GObject *object) DBusDisplayConsole *ddc = DBUS_DISPLAY_CONSOLE(object); qemu_console_unregister_listener(&ddc->dcl); + if (ddc->dcl.con) { + qemu_console_set_display_gl_ctx(ddc->dcl.con, NULL); + } qemu_remove_mouse_mode_change_notifier(&ddc->mouse_mode_notifier); g_clear_object(&ddc->iface_touch); g_clear_object(&ddc->iface_mouse); diff --git a/ui/dbus.c b/ui/dbus.c index e02a94df2f3..b23cb44c535 100644 --- a/ui/dbus.c +++ b/ui/dbus.c @@ -615,10 +615,23 @@ static const TypeInfo dbus_display_info = { } }; +static void +dbus_cleanup(void) +{ + Object *o; + + o = object_resolve_path_component(object_get_objects_root(), + "dbus-display"); + if (o) { + object_unparent(o); + } +} + static QemuDisplay qemu_display_dbus = { .type = DISPLAY_TYPE_DBUS, .early_init = early_dbus_init, .init = dbus_init, + .cleanup = dbus_cleanup, .vc = "vc", }; -- 2.54.0
