[mutter/cherry-pick-8e91c629] renderer/native: Clear old KMS updates on views rebuild
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/cherry-pick-8e91c629] renderer/native: Clear old KMS updates on views rebuild
- Date: Sun, 9 Jan 2022 23:12:34 +0000 (UTC)
commit da9ae90b4c10cbf960e0cfccf74e8c6402bf3910
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Jan 7 22:27:51 2022 +0100
renderer/native: Clear old KMS updates on views rebuild
If there are any pending updates, for example if we painted one of
multiple monitors but without having posted the update due to waiting
for another monitor to be painted, but before we paint all of them and
post the update, another hotplug event happens, we'd have stale pending
KMS update. When that update eventually would be processed, we'd try to
apply out-of-date updates which may contain freed memory.
Fix this by discarding any update when we're rebuilding the views. We
can be sure not to need any of the old updates since we're rebuilding
the whole content anyway.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1928
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2216>
(cherry picked from commit 8e91c6295dd38cf5b4d60e8069eb955218a94edb)
src/backends/native/meta-kms.c | 6 ++++++
src/backends/native/meta-kms.h | 2 ++
src/backends/native/meta-renderer-native.c | 1 +
3 files changed, 9 insertions(+)
---
diff --git a/src/backends/native/meta-kms.c b/src/backends/native/meta-kms.c
index 0750278ae5..e1ff91568e 100644
--- a/src/backends/native/meta-kms.c
+++ b/src/backends/native/meta-kms.c
@@ -181,6 +181,12 @@ struct _MetaKms
G_DEFINE_TYPE (MetaKms, meta_kms, G_TYPE_OBJECT)
+void
+meta_kms_discard_pending_updates (MetaKms *kms)
+{
+ g_clear_list (&kms->pending_updates, (GDestroyNotify) meta_kms_update_free);
+}
+
static void
meta_kms_add_pending_update (MetaKms *kms,
MetaKmsUpdate *update)
diff --git a/src/backends/native/meta-kms.h b/src/backends/native/meta-kms.h
index 9eae80e3fa..e39f0bfb8f 100644
--- a/src/backends/native/meta-kms.h
+++ b/src/backends/native/meta-kms.h
@@ -40,6 +40,8 @@ typedef enum _MetaKmsUpdateFlag
#define META_TYPE_KMS (meta_kms_get_type ())
G_DECLARE_FINAL_TYPE (MetaKms, meta_kms, META, KMS, GObject)
+void meta_kms_discard_pending_updates (MetaKms *kms);
+
MetaKmsUpdate * meta_kms_ensure_pending_update (MetaKms *kms,
MetaKmsDevice *device);
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index 42141460ef..4c6fa5b709 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -1365,6 +1365,7 @@ meta_renderer_native_rebuild_views (MetaRenderer *renderer)
META_RENDERER_CLASS (meta_renderer_native_parent_class);
meta_kms_discard_pending_page_flips (kms);
+ meta_kms_discard_pending_updates (kms);
keep_current_onscreens_alive (renderer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]