summarylogtreecommitdiffstats
path: root/backports.patch
blob: ae12ad29274aa6a04b073a26874b884f4530f6f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Author: Daniel van Vugt <daniel.van.vugt@canonical.com>
Editor: Joakim Soderlund <joakim.soderlund@gmail.com>
Source: https://gitlab.gnome.org/JockeTF/mutter/-/tree/41.1-2
Commit: 3b3978c60e6c67e5fe5262d528d5330bc12181d0
Rebase: Sat Nov 20 09:14:06 2021 +0100

diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c
index eb1e7412a..eacfd2cc1 100644
--- a/src/backends/native/meta-onscreen-native.c
+++ b/src/backends/native/meta-onscreen-native.c
@@ -188,6 +188,8 @@ notify_view_crtc_presented (MetaRendererView *view,
 
   frame_info = cogl_onscreen_peek_head_frame_info (onscreen);
 
+  g_return_if_fail (frame_info != NULL);
+
   crtc = META_CRTC (meta_crtc_kms_from_kms_crtc (kms_crtc));
   maybe_update_frame_info (crtc, frame_info, time_us, flags, sequence);
 
@@ -404,7 +406,7 @@ meta_onscreen_native_flip_crtc (CoglOnscreen                *onscreen,
   kms = meta_kms_device_get_kms (kms_device);
   kms_update = meta_kms_ensure_pending_update (kms, kms_device);
 
-  g_assert (meta_gpu_kms_is_crtc_active (gpu_kms, crtc));
+  g_return_if_fail (meta_gpu_kms_is_crtc_active (gpu_kms, crtc));
 
   renderer_gpu_data = meta_renderer_native_get_gpu_data (renderer_native,
                                                          render_gpu);
@@ -1011,7 +1013,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen  *onscreen,
   switch (renderer_gpu_data->mode)
     {
     case META_RENDERER_NATIVE_MODE_GBM:
-      g_warn_if_fail (onscreen_native->gbm.next_fb == NULL);
       g_clear_object (&onscreen_native->gbm.next_fb);
 
       use_modifiers = meta_renderer_native_use_modifiers (renderer_native);
@@ -2068,10 +2069,10 @@ meta_onscreen_native_new (MetaRendererNative *renderer_native,
                                   "height", height,
                                   NULL);
 
-  onscreen_native->renderer_native = renderer_native;
-  onscreen_native->render_gpu = render_gpu;
-  onscreen_native->output = output;
-  onscreen_native->crtc = crtc;
+  onscreen_native->renderer_native = g_object_ref (renderer_native);
+  onscreen_native->render_gpu = g_object_ref (render_gpu);
+  onscreen_native->output = g_object_ref (output);
+  onscreen_native->crtc = g_object_ref (crtc);
 
   return onscreen_native;
 }
@@ -2126,6 +2127,11 @@ meta_onscreen_native_dispose (GObject *object)
                    secondary_gpu_state_free);
   g_clear_pointer (&onscreen_native->next_post.rectangles, g_free);
   onscreen_native->next_post.n_rectangles = 0;
+
+  g_clear_object (&onscreen_native->crtc);
+  g_clear_object (&onscreen_native->output);
+  g_clear_object (&onscreen_native->render_gpu);
+  g_clear_object (&onscreen_native->renderer_native);
 }
 
 static void
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index eb6771b80..f39b0e004 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -593,12 +593,18 @@ static gboolean
 dummy_power_save_page_flip_cb (gpointer user_data)
 {
   MetaRendererNative *renderer_native = user_data;
+  GList *old_list =
+    g_steal_pointer (&renderer_native->power_save_page_flip_onscreens);
 
-  g_list_foreach (renderer_native->power_save_page_flip_onscreens,
+  g_list_foreach (old_list,
                   (GFunc) meta_onscreen_native_dummy_power_save_page_flip,
                   NULL);
-  g_clear_list (&renderer_native->power_save_page_flip_onscreens,
+  g_clear_list (&old_list,
                 g_object_unref);
+
+  if (renderer_native->power_save_page_flip_onscreens != NULL)
+    return G_SOURCE_CONTINUE;
+
   renderer_native->power_save_page_flip_source_id = 0;
 
   return G_SOURCE_REMOVE;