From 4995fa2a481ae9fbb242fb13f499126e8e7e4bf5 Mon Sep 17 00:00:00 2001 From: Daniel van Vugt Date: Wed, 11 May 2022 16:00:32 +0800 Subject: [PATCH] onscreen/native: Skip try_post_latest_swap if shutting down Otherwise we could get: meta_kms_prepare_shutdown -> flush_callbacks -> ... -> try_post_latest_swap -> post and queue more callbacks So later in shutdown those callbacks would trigger an assertion failure in meta_kms_impl_device_atomic_finalize: g_hash_table_size (impl_device_atomic->page_flip_datas) == 0 Signed-off-by: Mingi Sung --- src/backends/native/meta-onscreen-native.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c index 4228e4570..b2a26f96f 100644 --- a/src/backends/native/meta-onscreen-native.c +++ b/src/backends/native/meta-onscreen-native.c @@ -1497,6 +1497,8 @@ try_post_latest_swap (CoglOnscreen *onscreen) MetaRendererNative *renderer_native = renderer_gpu_data->renderer_native; MetaRenderer *renderer = META_RENDERER (renderer_native); MetaBackend *backend = meta_renderer_get_backend (renderer); + MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend); + MetaKms *kms = meta_backend_native_get_kms (backend_native); MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend); MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen); @@ -1511,7 +1513,8 @@ try_post_latest_swap (CoglOnscreen *onscreen) int sync_fd; COGL_TRACE_SCOPED_ANCHOR (MetaRendererNativePostKmsUpdate); - if (onscreen_native->next_frame == NULL) + if (onscreen_native->next_frame == NULL || + meta_kms_is_shutting_down (kms)) return; power_save_mode = meta_monitor_manager_get_power_save_mode (monitor_manager);