backend: Split dispose into dispose and finalize

Components which do not keep references to other components can be moved
to finalize and be available for longer which can help to shut down the
other components.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4018>
This commit is contained in:
Sebastian Wick 2024-09-10 18:53:40 +02:00
parent 8da99b69e2
commit e47379faad

View File

@ -225,34 +225,8 @@ meta_backend_dispose (GObject *object)
g_clear_object (&priv->remote_access_controller);
g_clear_object (&priv->dnd);
#ifdef HAVE_LIBWACOM
g_clear_pointer (&priv->wacom_db, libwacom_database_destroy);
#endif
#ifdef HAVE_GNOME_DESKTOP
g_clear_object (&priv->pnp_ids);
#endif
if (priv->sleep_signal_id)
{
g_dbus_connection_signal_unsubscribe (priv->system_bus, priv->sleep_signal_id);
priv->sleep_signal_id = 0;
}
if (priv->upower_watch_id)
{
g_bus_unwatch_name (priv->upower_watch_id);
priv->upower_watch_id = 0;
}
g_cancellable_cancel (priv->cancellable);
g_clear_object (&priv->cancellable);
g_clear_object (&priv->system_bus);
g_clear_object (&priv->upower_proxy);
g_clear_handle_id (&priv->device_update_idle_id, g_source_remove);
g_clear_object (&priv->settings);
g_clear_pointer (&priv->default_seat, clutter_seat_destroy);
g_clear_pointer (&priv->stage, clutter_actor_destroy);
g_clear_pointer (&priv->idle_manager, meta_idle_manager_free);
@ -260,15 +234,49 @@ meta_backend_dispose (GObject *object)
/* the renderer keeps references to color devices which keep references
* to the color manager. */
g_clear_object (&priv->color_manager);
#ifdef HAVE_EGL
g_clear_object (&priv->egl);
#endif
g_clear_pointer (&priv->clutter_context, clutter_context_destroy);
g_clear_list (&priv->gpus, g_object_unref);
G_OBJECT_CLASS (meta_backend_parent_class)->dispose (object);
}
static void
meta_backend_finalize (GObject *object)
{
MetaBackend *backend = META_BACKEND (object);
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
g_cancellable_cancel (priv->cancellable);
g_clear_object (&priv->cancellable);
if (priv->sleep_signal_id)
{
g_dbus_connection_signal_unsubscribe (priv->system_bus, priv->sleep_signal_id);
priv->sleep_signal_id = 0;
}
g_clear_object (&priv->system_bus);
if (priv->upower_watch_id)
{
g_bus_unwatch_name (priv->upower_watch_id);
priv->upower_watch_id = 0;
}
g_clear_object (&priv->upower_proxy);
g_clear_object (&priv->settings);
#ifdef HAVE_EGL
g_clear_object (&priv->egl);
#endif
#ifdef HAVE_LIBWACOM
g_clear_pointer (&priv->wacom_db, libwacom_database_destroy);
#endif
#ifdef HAVE_GNOME_DESKTOP
g_clear_object (&priv->pnp_ids);
#endif
G_OBJECT_CLASS (meta_backend_parent_class)->finalize (object);
}
void
meta_backend_destroy (MetaBackend *backend)
{
@ -834,6 +842,7 @@ meta_backend_class_init (MetaBackendClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = meta_backend_dispose;
object_class->finalize = meta_backend_finalize;
object_class->set_property = meta_backend_set_property;
object_class->get_property = meta_backend_get_property;