Author: Daniel van Vugt Editor: Joakim Soderlund 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 @@ -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;