From c77d89a9f160d964c4d050c98370c7d8301e27fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Tue, 4 Feb 2025 18:44:29 +0100 Subject: [PATCH] kms/cursor-manager: Get current cursor position later Specifically, only after checking crtc_state_impl->cursor_invalidated. If that's false, we bail anyway, so no point getting the current cursor position, which can get blocked by another thread holding the seat_impl->state_lock in writer mode. Part-of: --- src/backends/native/meta-kms-cursor-manager.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backends/native/meta-kms-cursor-manager.c b/src/backends/native/meta-kms-cursor-manager.c index fe20ebb91..3724bac07 100644 --- a/src/backends/native/meta-kms-cursor-manager.c +++ b/src/backends/native/meta-kms-cursor-manager.c @@ -327,9 +327,6 @@ maybe_update_cursor_plane (MetaKmsCursorManagerImpl *cursor_manager_impl, g_assert (old_buffer && !*old_buffer); - if (!get_current_cursor_position (cursor_manager_impl, &x, &y)) - return update; - crtc_state_impl = find_crtc_state (cursor_manager_impl, crtc); g_return_val_if_fail (crtc_state_impl, update); @@ -340,6 +337,9 @@ maybe_update_cursor_plane (MetaKmsCursorManagerImpl *cursor_manager_impl, if (!crtc_state_impl->cursor_invalidated) return update; + if (!get_current_cursor_position (cursor_manager_impl, &x, &y)) + return update; + device = meta_kms_crtc_get_device (crtc_state_impl->crtc); buffer = crtc_state_impl->buffer; hotspot = &crtc_state_impl->hotspot;