mirror of
https://github.com/brl/mutter.git
synced 2024-11-23 00:20:42 -05:00
kms: Prepare shutdown on 'prepare-shutdown' signal
Doing it in dispose means the backend is actively tearing down itself, meaning various components might or might not be there, depending on how the tearing down is implemented. Make things a bit more robust by doing any work that might rely on the backend being there before shutdown is done in response to the 'prepare-shutdown' signal being emitted by the backend. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
This commit is contained in:
parent
5f34d1eae2
commit
c6b454d00f
@ -113,9 +113,6 @@ meta_backend_native_dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
MetaBackendNative *native = META_BACKEND_NATIVE (object);
|
MetaBackendNative *native = META_BACKEND_NATIVE (object);
|
||||||
|
|
||||||
if (native->kms)
|
|
||||||
meta_kms_prepare_shutdown (native->kms);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (meta_backend_native_parent_class)->dispose (object);
|
G_OBJECT_CLASS (meta_backend_native_parent_class)->dispose (object);
|
||||||
|
|
||||||
g_clear_pointer (&native->startup_render_devices, g_hash_table_unref);
|
g_clear_pointer (&native->startup_render_devices, g_hash_table_unref);
|
||||||
|
@ -708,6 +708,23 @@ meta_kms_create_device (MetaKms *kms,
|
|||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gpointer
|
||||||
|
prepare_shutdown_in_impl (MetaKmsImpl *impl,
|
||||||
|
gpointer user_data,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
meta_kms_impl_prepare_shutdown (impl);
|
||||||
|
return GINT_TO_POINTER (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_prepare_shutdown (MetaBackend *backend,
|
||||||
|
MetaKms *kms)
|
||||||
|
{
|
||||||
|
meta_kms_run_impl_task_sync (kms, prepare_shutdown_in_impl, NULL, NULL);
|
||||||
|
flush_callbacks (kms);
|
||||||
|
}
|
||||||
|
|
||||||
MetaKms *
|
MetaKms *
|
||||||
meta_kms_new (MetaBackend *backend,
|
meta_kms_new (MetaBackend *backend,
|
||||||
MetaKmsFlags flags,
|
MetaKmsFlags flags,
|
||||||
@ -737,25 +754,13 @@ meta_kms_new (MetaBackend *backend,
|
|||||||
g_signal_connect (udev, "device-removed",
|
g_signal_connect (udev, "device-removed",
|
||||||
G_CALLBACK (on_udev_device_removed), kms);
|
G_CALLBACK (on_udev_device_removed), kms);
|
||||||
|
|
||||||
|
g_signal_connect (backend, "prepare-shutdown",
|
||||||
|
G_CALLBACK (on_prepare_shutdown),
|
||||||
|
kms);
|
||||||
|
|
||||||
return kms;
|
return kms;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer
|
|
||||||
prepare_shutdown_in_impl (MetaKmsImpl *impl,
|
|
||||||
gpointer user_data,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
meta_kms_impl_prepare_shutdown (impl);
|
|
||||||
return GINT_TO_POINTER (TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
meta_kms_prepare_shutdown (MetaKms *kms)
|
|
||||||
{
|
|
||||||
meta_kms_run_impl_task_sync (kms, prepare_shutdown_in_impl, NULL, NULL);
|
|
||||||
flush_callbacks (kms);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_kms_finalize (GObject *object)
|
meta_kms_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
@ -778,6 +783,11 @@ meta_kms_finalize (GObject *object)
|
|||||||
G_OBJECT_CLASS (meta_kms_parent_class)->finalize (object);
|
G_OBJECT_CLASS (meta_kms_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_kms_constructed (GObject *object)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_kms_init (MetaKms *kms)
|
meta_kms_init (MetaKms *kms)
|
||||||
{
|
{
|
||||||
@ -789,6 +799,7 @@ meta_kms_class_init (MetaKmsClass *klass)
|
|||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
object_class->finalize = meta_kms_finalize;
|
object_class->finalize = meta_kms_finalize;
|
||||||
|
object_class->constructed = meta_kms_constructed;
|
||||||
|
|
||||||
signals[RESOURCES_CHANGED] =
|
signals[RESOURCES_CHANGED] =
|
||||||
g_signal_new ("resources-changed",
|
g_signal_new ("resources-changed",
|
||||||
|
@ -66,8 +66,6 @@ MetaKmsDevice * meta_kms_create_device (MetaKms *kms,
|
|||||||
MetaKmsDeviceFlag flags,
|
MetaKmsDeviceFlag flags,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
void meta_kms_prepare_shutdown (MetaKms *kms);
|
|
||||||
|
|
||||||
MetaKms * meta_kms_new (MetaBackend *backend,
|
MetaKms * meta_kms_new (MetaBackend *backend,
|
||||||
MetaKmsFlags flags,
|
MetaKmsFlags flags,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
Loading…
Reference in New Issue
Block a user