wayland: Warn and fix accounting on missed CLUTTER_TOUCH_END events

If we happen to handle a CLUTTER_TOUCH_BEGIN without a corresponding
CLUTTER_TOUCH_END at MetaWaylandTouch, we would still attempt to
reuse the older MetaWaylandTouchInfo, resulting in an assert triggered
as there is a stale touch reference on the previous surface.

Warn in place and create a new touch info struct to still fix the
broken surface accounting, instead of finding out the hard
way after the surface is destroyed. The assert is preserved to ensure
the accounting does not sneakily break anymore/further.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/584
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2251>
This commit is contained in:
Carlos Garnacho 2022-01-17 13:18:53 +01:00 committed by Marge Bot
parent b7f7b82b89
commit 7bf10de538

View File

@ -177,8 +177,11 @@ touch_get_info (MetaWaylandTouch *touch,
touch_info = g_hash_table_lookup (touch->touches, sequence);
if (!touch_info && create)
if (create)
{
if (touch_info != NULL)
g_warning ("Stale touch information for sequence slot %p", sequence);
touch_info = g_new0 (MetaWaylandTouchInfo, 1);
touch_info->slot = clutter_event_sequence_get_slot (sequence);
g_hash_table_insert (touch->touches, sequence, touch_info);