mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 10:00:45 -05:00
kms/impl-device: Handle empty updates properly
This fixes freezes on cursor movement when: 1. meta_onscreen_native_finish_frame would create an empty update. 2. maybe_update_cursor_plane would leave it empty (!cursor_invalidated). 3. do_process would fail to recognise a non-null empty update as an error. 4. meta_kms_impl_device_handle_update would fail to send feedback on errors from do_process, because do_process is meant to do it. 5. Page flip listeners would wait forever for feedback that never comes. Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2923, https://gitlab.gnome.org/GNOME/mutter/-/issues/2924, https://gitlab.gnome.org/GNOME/mutter/-/issues/2926, https://gitlab.gnome.org/GNOME/mutter/-/issues/2933 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3138>
This commit is contained in:
parent
b516b009fa
commit
bafea13e95
@ -1214,14 +1214,22 @@ do_process (MetaKmsImplDevice *impl_device,
|
|||||||
|
|
||||||
update = meta_kms_impl_filter_update (impl, latch_crtc, update, flags);
|
update = meta_kms_impl_filter_update (impl, latch_crtc, update, flags);
|
||||||
|
|
||||||
if (!update)
|
if (!update || meta_kms_update_is_empty (update))
|
||||||
{
|
{
|
||||||
GError *error;
|
GError *error;
|
||||||
|
|
||||||
error = g_error_new (META_KMS_ERROR,
|
error = g_error_new (META_KMS_ERROR,
|
||||||
META_KMS_ERROR_EMPTY_UPDATE,
|
META_KMS_ERROR_EMPTY_UPDATE,
|
||||||
"Empty update");
|
"Empty update");
|
||||||
return meta_kms_feedback_new_failed (NULL, error);
|
feedback = meta_kms_feedback_new_failed (NULL, error);
|
||||||
|
|
||||||
|
if (update)
|
||||||
|
{
|
||||||
|
queue_result_feedback (impl_device, update, feedback);
|
||||||
|
meta_kms_update_free (update);
|
||||||
|
}
|
||||||
|
|
||||||
|
return feedback;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(flags & META_KMS_UPDATE_FLAG_TEST_ONLY))
|
if (!(flags & META_KMS_UPDATE_FLAG_TEST_ONLY))
|
||||||
|
Loading…
Reference in New Issue
Block a user