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;
|